我有一个注册表单,需要姓名,电话和可选的评论部分。运行多个测试后,表单似乎提交并(页面底部的PHP代码)页面将我重定向到“谢谢页面”。但我没有收到任何电子邮件。谁知道我做错了什么?
<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 = 'veeeeeech@gmail.com';
$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');
&GT;
答案 0 :(得分:1)
邮件传递是程序员POV的一个不精确的科学。系统管理员对它有更多的控制权......你也是“盒子拥有者”吗?
您甚至没有检查mail()调用是否失败:
$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连接的防火墙?
服务器日志说什么?
邮件是否被垃圾邮件过滤器捕获?
你可以看出为什么我说“不精确的科学”....
答案 1 :(得分:1)
当邮件被接受传递时,PHP的邮件功能将返回true。正如Kkinsey所指出的,这与实际交付或保证交付不同。
如果您对托管Web文件的服务器具有shell访问权限,则可以通过尝试来测试是否可以发送邮件。
mail -s "Test Email" veeeeeech@gmail.com
输入一行文字,然后在一行上单独输入一个&#34;。&#34;并返回。在你的Gmail帐户中查找邮件。
您也可以尝试直接使用sendmail作为快速测试。
sendmail veeeeeech@gmail.com
答案 2 :(得分:0)
$myemail = 'veeeeeech@gmail.com';
$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.");