我正在尝试发送一封包含从html表单收集的数据的电子邮件。
以下是表格:
<form action="estimate.php" action="post">
<fieldset>
<input type="text" name="name" value="FULL NAME" onfocus="if (this.value=='FULL NAME') this.value='';"/>
<input type="text" name="phone" value="PHONE NUMBER" onfocus="if (this.value=='PHONE NUMBER') this.value='';"/>
<input type="text" name="email" value="EMAIL" onfocus="if (this.value=='EMAIL') this.value='';"/>
<input type="text" name="date" value="MOVE DATE" onfocus="if (this.value=='MOVE DATE') this.value='';"/>
<input type="text" name="origin" value="ORIGINATING ADDRESS" onfocus="if (this.value=='ORIGINATING ADDRESS') this.value='';"/>
<input type="text" name="destination" value="DESTINATION ADDRESS" onfocus="if (this.value=='DESTINATION ADDRESS') this.value='';"/>
<select name="move-type">
<option value="" selected="selected">TYPE OF MOVE</option>
<option value="Private">Private</option>
<option value="Commercial">Commercial</option>
</select>
<input id="quoteSubmit" type="image" src="_images/btn_submit.png" alt="" onmouseover="javascript:this.src='_images/btn_submit-over.png'" onmouseout="javascript:this.src='_images/btn_submit.png'"/>
</fieldset>
</form>
这是PHP(我在之前的问题帖子中得到了一些帮助):
<html>
<head>
<title>Contact Us</title>
</head>
<body>
<h2>Email Confirmation Page</h2>
<p>This is to prove that something is showing up.</p>
<?php # sends contents of Free Estimate form
if (isset($_POST['submitted'])) {
$errors = array();
// Check for empty fields
$checkArray = array('name', 'email', 'date', 'origin', 'destination');
foreach($checkArray as $check) {
if (empty($_POST[$check])) {
$errors[] = 'Please enter your '.$check;
}
}
if (empty($errors)) { // everything is okay
$to = "my@email.com";
$body = "The following Free Estimate Request has been submitted:\n
Submitted by: {$_POST['name']}\r
E-mail: {$_POST['email']}\r
Phone: {$_POST['phone']}\r
Move date {$_POST['date']}\r
Moving from: {$_POST['origin']}\r
Moving to: {$_POST['destination']}\r
Move type: {$_POST['move-type']}\r;
";
mail ($to, 'Free Estimate Request', $body, 'From: '.$from);
// end email
} else {
echo '<h2>Error!</h2>
<p class="errors">The following error(s) occurred:<br />';
foreach ($errors as $msg) {
echo " - $msg<br />\n";
}
echo '</p><p>Please go back and try again.</p><p><br /></p>';
}
};
?>
</body>
</html>
estimate.php页面显示正常,没有生成错误,但我没有收到任何电子邮件。
不确定我在这里缺少什么。
感谢。
答案 0 :(得分:2)
许多事情可以做到这一点,其中一个是格式错误的电子邮件。如果您不了解RFC /标准,使用PHP mail函数很容易实现。即使mail()
返回true(成功),电子邮件也可能永远无法到达目的地。
这种失败的更多(非显而易见的)原因通常是:
额外标题(如Reply-To
)必须用\r\n
分隔:
应该有多个额外的标头 用CRLF分隔(\ r \ n)。
正文中的行必须用\n
分隔:
每行应用a分隔 LF(\ n)。线条不应该更大 超过70个字符
目前你在身体中使用\r
和\n
是不正确的(在某些情况下它可能会起作用,但它取决于你手中的很多东西)。
其他原因可能是缺少Reply-To
标题或甚至配置错误MX records,这使得您使用PHP发送的所有电子邮件都是垃圾邮件。
最好(也是最简单)的解决方案IMHO将停止使用PHP邮件功能并切换到可以生成格式正确的邮件的库。这样您就不必学习所有棘手的RFC,并且如果您使用一个好的库,您的代码会更安全(请阅读email injection attacks)。
我使用的是Swift Mailer和PHPMailer。
答案 1 :(得分:1)
尝试使用简单的身体发送:
$body = "The following Free Estimate Request has been submitted:\n";
看看它是否发送。
还可以尝试一个基本的电子邮件:
mail ($to, 'Free Estimate Request', 'This is my body', 'From: '.$from);
还可以尝试更改不同的电子邮件地址并检查垃圾文件夹。
当然要确保有一台运行的SMTP服务器
<强>更新强>
您可能还想:
echo "<pre>";
print_r($_POST);
echo "</pre>";
在isset($_POST['submitted'])
之前添加此内容;然后你可以检查一下它是否走得那么远,你可以查看你的帖子
答案 2 :(得分:0)
您是否检查了mail()
的返回值,看它是否成功了?此外,SMTP服务器需要与Web服务器在同一台计算机上运行才能成功进行此调用。
答案 3 :(得分:0)
您运行此操作的计算机是否已配置为发送电子邮件?代码看起来很好,所以可能是配置问题,请检查this。
答案 4 :(得分:0)
您是否在UNIX系统上?检查系统日志。 PHP通过将其发送到系统邮件服务来发送电子邮件。在PHP发送电子邮件之前,您需要确保它正常工作。
答案 5 :(得分:0)
您是否从本地服务器运行?您需要进行DNS设置才能发送电子邮件...