我正在使用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不发送电子邮件的任何事情?
答案 0 :(得分:6)
PHP与邮件传递无关。它的工作开始和结束时将电子邮件发送到指定的SMTP代理/服务器。如果mail()
没有返回布尔值FALSE,那么PHP的工作已经成功,并且它已经不在了。
检查SMTP服务器的日志,看看切换完成后电子邮件会发生什么。很可能邮件被拒绝/灰名单/垃圾邮件被遗忘,因为PHP的mail()
确实受到了打击。
考虑切换到Swiftmailer或PHPMailer,这两者都提供了比邮件()更好的PHP< - > SMTP交互诊断。
从命令行手动测试意味着很少:您的shell环境与脚本可能执行的in-webserver环境(苹果和橙子)非常不同。
答案 1 :(得分:1)
这可能会产生误导。 PHP将返回true,因为就其而言,它已经完成了它的部分。但它无法保证SMTP服务器将遵守请求。
当我遇到这种情况时,事实证明我的主持人已经实施了一项新规定,即所有脚本邮件必须在标题中包含“来自”地址,该地址必须是与主机帐户关联的有效地址。
可能值得研究这种可能性。