我的HTML表单提交但我没有收到电子邮件

时间:2014-12-18 22:58:33

标签: php html forms email

我有一个注册表单,需要姓名,电话和可选的评论部分。运行多个测试后,表单似乎提交并(页面底部的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;

3 个答案:

答案 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.");