我正在使用 phps 邮件功能向我的用户发送电子邮件。然而,有些用户根本没有收到它们(甚至没有被垃圾邮件过滤器接收)。在我寻找错误的过程中,我被问到(我的用户邮件提供商的好人)我从他们的服务器得到什么响应。
但是,我不知道如何获得它。它应该保存在我的服务器上的某个地方吗?在那种情况下在哪里?还是由php返回?或者保存在某处的错误日志中?或者有没有办法得到它?
我正在运行 Ubuntu 服务器并将 postfix 用于邮件
错误至少会出现在您的邮件服务器日志中。您邮件上的发件人地址/信封发件人是什么?任何退回邮件都应发送至该地址。如果该地址无法投递,则退回邮件也可能被退回。因此,您需要首先检查并确保您可以访问在标题中指定的电子邮件帐户,From:
或者在Return-path:
标题中指定的电子邮件帐户(如果存在)。如果它们不存在,您将需要查看邮件服务器日志,postfix 通常会记录 /var/log/mail.log 但这可以更改,因此您的配置可能会有所不同。
处理退回邮件的另一种好方法是使用类似 VERP(http://en.wikipedia.org/wiki/Variable_envelope_return_path)的可变信封返回路径。这样,您可以通过查看退回邮件的地址来自动处理退回邮件。
来自php网:
如果 mail() 遇到错误,它只会返回 false。要找出原因,我们需要发现 sendmail 命令的错误所在。在 Linux 上,这通常是 /var/log/messages。
邮件错误不会出现在 /var/log/httpd/errors 中(因为 apache 不知道 /usr/sbin/sendmail 返回 false 是错误),也不会出现在 /var/log/mail/ 中(因为电子邮件从来没有达到后缀,也没有发生 SMTP/传递错误。)
http://php.net/manual/en/function.mail.php
但是您可以轻松地将电子邮件的结果存储到一个变量中,如前所述,它只会是true
or false
。
您可以检查是否已发送邮件,如下所示:
<?php
$to = "recipient@example.com";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
if (mail($to, $subject, $body)) {
echo("<p>Message successfully sent!</p>");
} else {
echo("<p>Message delivery failed...</p>");
}
?>
您也可以单独存储消息发送或失败的日志。