我正在使用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
Run Code Online (Sandbox Code Playgroud)
php文件
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
trace(mail('jamie@domain.tld','Testing','test.'));
Run Code Online (Sandbox Code Playgroud)
邮件程序日志显示此信息
mail() on [/var/www/misc/mail.php:5]: To: jamie@domain.tld -- Headers:
Run Code Online (Sandbox Code Playgroud)
通过CLI运行sendmail,如下所示:
echo -e "To: jamie@domain.tld\nSubject: Test\nTest\n" | sendmail -bm -t -v
Run Code Online (Sandbox Code Playgroud)
返回"发件人确定","收件人确定"
任何人都知道可能导致php不发送电子邮件的任何事情?
PHP与邮件传递无关.它的工作开始和结束时将电子邮件发送到指定的SMTP代理/服务器.如果mail()没有返回一个布尔值FALSE,那么PHP的工作已经成功并且它已经不在了.
检查SMTP服务器的日志,看看切换完成后电子邮件会发生什么.很可能邮件被拒绝/灰名单/垃圾邮件被遗忘,因为PHP mail()真的很受打击.
考虑切换到Swiftmailer或PHPMailer,这两者都提供了比mail()更好的PHP < - > SMTP交互诊断.
从命令行手动测试意味着很少:您的shell环境与脚本可能执行的in-webserver环境(苹果和橙子)非常不同.