1

我正在使用 sendmail 包和 php,当我尝试在 PHP 中使用 mail 函数时,它返回 true,但没有发送任何内容。

php配置

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path =/usr/sbin/sendmail -t -i

.php 文件

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
trace(mail('jamie@domain.tld','Testing','test.'));

邮件日志显示这个

mail() on [/var/www/misc/mail.php:5]: To: jamie@domain.tld -- Headers: 

通过 CLI 运行 sendmail,如下所示:

echo -e "To: jamie@domain.tld\nSubject: Test\nTest\n" | sendmail -bm -t -v

返回“发件人正常”、“收件人正常”

任何人都知道可能导致 php 不发送电子邮件的任何事情吗?

4

2 回答 2

6

PHP 与邮件传递无关。它的工作以将电子邮件移交给指定的 SMTP 代理/服务器开始和结束。如果mail()不返回布尔值 FALSE,则 PHP 的工作已经成功,并且不在图片中。

检查您的 SMTP 服务器的日志以了解在移交完成后电子邮件会发生什么情况。邮件很可能被拒绝/灰名单/垃圾邮件过滤到遗忘,因为 PHP 的mail()真正打击。

考虑切换到SwiftmailerPHPMailer,这两者都比 mail() 提供了更好的 PHP<->SMTP 交互诊断。

从命令行手动测试意义不大:您的 shell 环境与您的脚本可能在其中执行的网络服务器环境非常不同 - 苹果和橘子。

于 2012-07-27T16:14:10.353 回答
1

这可能会产生误导。PHP 将返回 true,因为就而言,它已经完成了它的职责。但它不能保证 SMTP 服务器会接受该请求。

当这种情况发生在我身上一次时,我发现我的主机已经实施了一项新规定,即所有脚本邮件的标题中必须包含一个“发件人”地址,该地址必须是与主机帐户关联的有效地址。

可能值得研究这种可能性。

于 2012-07-27T16:15:07.927 回答