我使用phps邮件功能向我的用户发送电子邮件。 但是有些用户根本没有收到它们(甚至没有被垃圾邮件过滤器接收)。 在我寻找错误的过程中,我被问到(我的用户邮件提供商的好人)我从他们的服务器得到了什么回复。
然而,我不知道如何做到这一点。 它应该保存在我服务器的某个地方吗?在那种情况下? 或者它是由PHP返回的?或者保存在某个错误日志中? 或者甚至有办法得到它?
我正在运行Ubuntu服务器并使用postfix进行邮件
答案 0 :(得分:2)
错误将至少在您的邮件服务器日志中。您邮件上的发件人地址/信封发件人是什么?任何退回邮件应该转到该地址。如果该地址无法送达,那么反弹也可能会反弹。因此,您需要首先检查并确保您可以访问From:
标头中指定的电子邮件帐户或Return-path:
标头中的电子邮件帐户(如果存在)。如果他们没有弹跳,你将需要查看邮件服务器日志,postfix通常会记录/var/log/mail.log但是这可以更改,所以你的配置可能会有所不同。
处理退回邮件的另一个好方法是使用类似VERP(http://en.wikipedia.org/wiki/Variable_envelope_return_path)变量包络返回路径的方法。这样,您就可以通过查看返回的地址自动处理退回邮件。
答案 1 :(得分:0)
来自php net:
如果mail()遇到错误,则只返回false。为了找到原因,我们 需要发现sendmail命令放置错误的位置。在Linux上, 这通常是/ var / log / messages。
邮件错误不会在/ var / log / httpd / errors中结束(因为apache 不知道/ usr / sbin / sendmail返回false是一个错误),也不知道 在/ var / log / mail /中(因为电子邮件从来没有到postfix,和 没有发生SMTP /传递错误。)
http://php.net/manual/en/function.mail.php
但您可以轻松地将电子邮件的结果存储到变量中,如前所述,它只会是true
或false
。
答案 2 :(得分:0)
您可以检查是否发送了邮件,如下所示:
<?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>");
}
?>
此外,您可以单独使用alog,即存储消息发送或失败。