PHP不发送出站邮件

时间:2012-07-27 16:10:50

标签: php sendmail

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

php config

; 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

返回“Sender ok”,“Recipient ok”

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

2 个答案:

答案 0 :(得分:6)

PHP与邮件传递无关。它的工作开始和结束时将电子邮件发送到指定的SMTP代理/服务器。如果mail()没有返回布尔值FALSE,那么PHP的工作已经成功,并且它已经不在了。

检查SMTP服务器的日志,看看切换完成后电子邮件会发生什么。很可能邮件被拒绝/灰名单/垃圾邮件被遗忘,因为PHP的mail()确实受到了打击。

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

从命令行手动测试意味着很少:您的shell环境与脚本可能执行的in-webserver环境(苹果和橙子)非常不同。

答案 1 :(得分:1)

这可能会产生误导。 PHP将返回true,因为就而言,它已经完成了它的部分。但它无法保证SMTP服务器将遵守请求。

当我遇到这种情况时,事实证明我的主持人已经实施了一项新规定,即所有脚本邮件必须在标题中包含“来自”地址,该地址必须是与主机帐户关联的有效地址。

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