2013-09-01 64 views
0

嗨我的網站上有簡單的電子郵件聯繫表格,表格工作包括髮送郵件的成功,但是我沒有收到指定的網絡郵件服務器的電子郵件。我正在運行最新的PHP。做一些網絡服務器緩存郵件,或者在這段代碼中有一些錯誤,我沒有看到。PHP聯繫表格郵件沒有收到

<?php 

$EmailFrom = "[email protected]"; 
$EmailTo = "[email protected]"; 
$Subject = "Contacting Me"; 
$Name = Trim(stripslashes($_POST['Name'])); 
$Tel = Trim(stripslashes($_POST['Tel'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// validation 
$validationOK=true; 
if (!$validationOK) { 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">"; 
    exit; 
} 

// prepare email body text 
$Body = ""; 
$Body .= "Name: "; 
$Body .= $Name; 
$Body .= "\n"; 
$Body .= "Tel: "; 
$Body .= $Tel; 
$Body .= "\n"; 
$Body .= "Email: "; 
$Body .= $Email; 
$Body .= "\n"; 
$Body .= "Message: "; 
$Body .= $Message; 
$Body .= "\n"; 

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>"); 

// redirect to success page 
if ($success){ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=index\">"; 
} 
else{ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">"; 
} 
?> 

<div id="contact-area"> 

      <form method="post" action="contactengine.php"> 
       <label for="Name">Name:</label> 
       <input type="text" name="Name" id="Name" /> 

       <label for="Email">Email:</label> 
       <input type="text" name="Email" id="Email" /> 

       <label for="Message">Thought:</label><br /> 
       <textarea name="Message" rows="20" cols="20" id="Message"></textarea> 

       <input type="submit" name="submit" value="Transmit" class="submit-button" /> 
      </form> 

      <div style="clear: both;"></div></div> 
+0

你或許應該用一點時間煉製驗證。你知道,讓它更有效... –

回答

1

請勿使用print "<meta http-equiv=\"refresh\"...,因爲在測試過程中,它會在發送同一電子郵件的多個副本時導致無限循環。

改爲使用header('Location: ...');以及exit;

另外,你所有的<meta http-equiv=\"refresh\"都產生了一個分析錯誤。

工作示例(測試用電子郵件成功接收):

<?php 

$EmailFrom = "[email protected]"; 
$EmailTo = "[email protected]"; 
$Subject = "Contacting Me"; 
$Name = Trim(stripslashes($_POST['Name'])); 
$Tel = Trim(stripslashes($_POST['Tel'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// validation 
$validationOK=true; 
if (!$validationOK) { 

// echo "error 1"; 

header('Location: error.htm'); 

exit; 
} 

// prepare email body text 
$Body = ""; 
$Body .= "Name: "; 
$Body .= $Name; 
$Body .= "\n"; 
$Body .= "Tel: "; 
$Body .= $Tel; 
$Body .= "\n"; 
$Body .= "Email: "; 
$Body .= $Email; 
$Body .= "\n"; 
$Body .= "Message: "; 
$Body .= $Message; 
$Body .= "\n"; 

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>"); 

// redirect to success page 
if ($success){ 

header('Location: http://www.example.com/'); 

exit; 

} 
else{ 

header('Location: error.htm'); 

exit; 

} 
?> 
+0

優秀,這完美的作品。謝謝!一旦時間限制結束,我會接受這個答案。 – benny

+0

@布萊克你非常歡迎:) –

2

發送郵件不僅僅是運行的郵件()命令更復雜,你需要看一看的電子郵件配置php.ini設置,並從那裏繼續進行故障排除。

如果您不配置郵件()函數來運行在主機上運行,​​你可以嘗試使用下面的開源郵件:

PHPMailer

什麼,你可以嘗試是使用實例提供並從您的家中連接的本地開發堆棧(XAMPP,MAMP,WAMP)運行,如果配置正確,您應該能夠接收郵件。

一旦確定,您可以在服務器上嘗試它,它也應該發送,如果沒有,請檢查發送郵件的傳出端口是否未被阻止。

除了使用PHPMailer之外,您還可以尋找一個簡單的PHP郵件程序並嘗試這些。

+0

我已經有了Swiftmailer for PHP的良好體驗。 –