2014-12-18 124 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."); 
相关问题