2014-12-18 122 views
-1

我有一個需要姓名,電話和和可選註釋部分的註冊表單。運行多個測試後,表單似乎提交併且(​​php代碼的底部)頁面將我重定向到「謝謝你的頁面」。但我沒有收到任何電子郵件。任何人都知道我在做什麼錯了?我的HTML表單提交但我沒有收到電子郵件

<form class="register-form" name="registerform" method="post" action="form-to-email.php"> 

      <div class="form-column"> 

       <p>Fields marked with * are required.</p> 

       <label for="first_name">First Name *</label> 
       <input type="text" id="first_name" name="first_name" placeholder="John"> 

       <label for="last_name">Last Name *</label> 
       <input type="text" id="last_name" name="last_name" placeholder="Smith"> 

       <label for="phone">Phone Number</label> 
       <input type="text" id="phone" name="phone" placeholder="503 999 9999"> 

       <label for="comments">Comments</label> 
       <textarea id="comments" name="comments"></textarea> 

      </div><!--/ Form Column --> 

      <div class="submit-wrap"><input class="submit-form" type="submit" value="Register" /></div> 

     </form><!--/ Form --> 

的PHP是這樣的:?

<?php 

$myemail = '[email protected]'; 

$first_name = $_POST['first_name']; 
$last_name = $_POST['last_name']; 
$visitor_phone = $_POST['phone']; 
$comments = $_POST['comments']; 


$to = $myemail; 

$email_subject = "$first_name\n $last_name\n registered for Winter Camp 2015"; 

$email_body = "They said: \n $comments". "Their phone number is $visitor_phone.\n". 


$headers = "From: $myemail\n"; 

mail($to,$email_subject,$email_body,$headers); 

header('Location: registered-thanks.html'); 

>

+1

您的服務器是如何設置的?您的服務器上是否安裝了所需的位(即MTA等)並能夠中繼郵件? – slugonamission 2014-12-18 23:05:22

+1

你的代碼有錯誤。 '$ email_body ='不以分號結尾。 – RST 2014-12-18 23:10:32

回答

1

郵件傳遞速度從程序員的POV一個不精確的科學。系統管理員對它有更多的控制......你是否也是「盒子擁有者」?

你甚至沒有檢查,看看郵件()調用失敗:

$success = mail($to,$email_subject,$email_body,$headers); 

if ($success) header('Location: registered-thanks.html'); 

else die("Could not send mail!!"); 

當然這是方式簡化...更好的錯誤處理將是一個不錯的開始。

假設($ success)返回true,那麼系統會做正確的事情。您需要問的問題包括:我的PHP安裝是否正確設置爲執行mail()?

我的虛擬主機允許它嗎?

是否有阻止出站SMTP連接的防火牆?

服務器日誌說什麼?

郵件是否被垃圾郵件過濾器捕獲?當消息已經接受交付

你可以看到爲什麼我說「一個不精確的科學」 ......

+0

哇,我沒有意識到它要複雜得多。我還沒有進入PHP並正在研究這個,並沒有抓住任何這些東西。感謝您的幫助!如果有任何地方可以查看整個步行,那將會非常有幫助。 – Veech 2014-12-18 23:10:01

+0

我想Google可能是你的朋友,那裏。相當長的PHP.net文檔是一個很好的開始。對於一般的SMTP,請查找「SMTP解釋」之類的內容。 我的意思是,通常郵件()會正常工作,但如果沒有,「遊戲正在進行」就像福爾摩斯一樣;) – 2014-12-18 23:13:47

+0

作爲另一個小問題,@Veech郵件頭應該用' \ r \ n',而不僅僅是'\ n'。 – TRiG 2014-12-18 23:21:27

1

PHP的郵件功能將返回true。這與Kkinsey指出的實際交付或保證交付不同。

如果您有託管網站文件的服務器的shell訪問權限,您可以測試您是否可以通過嘗試這種方式發送郵件。

mail -s "Test Email" [email protected] 

輸入一行文本,然後在一行上自行輸入一個「。」。並打回來。在您的Gmail帳戶中查找郵件。

您也可以嘗試直接使用sendmail作爲快速測試。

sendmail [email protected] 
0

你檢查了垃圾郵件文件夾嗎?如果郵件沒有回覆標題,某些服務會拒絕該郵件。

$myemail = '[email protected]'; 
$to = $myemail; 

$headers = "From: $myemail \r\n"; 

$headers .= "Reply-To: $myemail \r\n"; 

$headers .= 'X-Mailer: PHP/' . phpversion(); 

$success = mail($to,$email_subject,$email_body,$headers); 

if ($success) header('Location: registered-thanks.html'); 

else die("Foobar. Your mom."); 
相關問題