php.ini sendmail_from测试邮件服务器和Papercut是否需要?

时间:2019-06-20 00:47:08

标签: php apache email

我安装了装有XAMPP的Windows 10。我想看看我的选项是什么,这些方法可以离线测试使用PHP mail()函数发送电子邮件,以进行开发和测试。我在Windows上找到了三种方法来做到这一点,它们是...

XAMPP +测试邮件服务器工具 XAMPP +剪纸 用mailtodesk配置的XAMPP

我尝试了两个不同的PHP脚本。一个是简单的PHP mail()脚本


mail('me@mail.com', 'MySubject', 'Message 123...');

?>

另一个是对PHP mail()和HTML电子邮件的更高级使用。

<?php
$to = "somebody@example.com, somebodyelse@example.com";
$subject = "HTML email";

$message = "
<html>
<head>
<title>HTML email</title>
</head>
<body>
<p>This email contains HTML Tags!</p>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
</tr>
</table>
</body>
</html>
";

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

// More headers
$headers .= 'From: <webmaster@example.com>' . "\r\n";
$headers .= 'Cc: myboss@example.com' . "\r\n";

mail($to,$subject,$message,$headers);
?>

出于某种原因,我需要从php.ini中的sendmail_from行中删除分号,以使第一个PHP脚本能够与Test Mail Server Tool和Papercut一起使用。如果不删除分号,则会出现以下错误。

Warning: mail(): Bad Message Returns Path in C:\xampp\htdocs\mailtestbasic.php on line 3

这是为什么?当我在XAMPP中设置mailtodisk时,既不会出现此错误,也不会在第二个PHP脚本中出现此错误。

1 个答案:

答案 0 :(得分:1)

错误消息有点有趣,因为它包含一个错字(返回路径,而不是returnS路径)...

发送电子邮件时,您需要有效的return-path。如果sendmail_fromphp.ini中没有取消注释,则默认为Apache用户@服务器名,因此在您的开发环境中可能类似于apache@localhost之类,任何SMTP都会拒绝它。

因此,将其设置为php.ini中的有效主机名至关重要(用户部分并不重要,但是如果收件人或返回路径均无效,它将在邮局主管电子邮件上产生流量)。

您也可以通过additional_parameters的{​​{1}}参数进行设置,请参见https://www.php.net/manual/en/function.mail.php中的示例#4

PS:如果您不熟悉电子邮件标题,mail()可能会令人困惑。它实际上会生成sendmail_from标题,以防电子邮件退回。被退回的电子邮件不会转到您在自己的标题中定义的return-path,因为它仅用于显示发件人(并在回复电子邮件时使用,除非您还定义了一个From标题,与reply-to不同。