我正在尝试在我的服务器上使用php mail()
功能。奇怪的是,它返回true,但我的电子邮件收件箱中没有收到任何内容。
然而,cpanel邮件转发器工作正常。
因为转发器给我发了电子邮件,所以这不是配置吗?
我尝试加入:
ini_set("sendmail_from", "do-not-reply@gmail.com");
但那没用。
这是我的代码:
$subject = "My Subject";
$body = "Email Body ";
$headers = 'From: do-not-reply@domain.com' . "\r\n" .
'Reply-To: do-not-reply@domain.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if (mail($email,$subject,$body,$headers))
echo "Sent!";
else
echo "Fail!";
答案 0 :(得分:6)
有许多原因可能导致此问题。以下是一些:
mail()
返回true。您需要解决其他可能性以找到故障点。
答案 1 :(得分:4)
mail()
函数很少返回true
以外的任何内容。它只关心它成功地将电子邮件发送给MTA(邮件传输代理 - 即实际发送它的程序)这一事实。
如果电子邮件格式不正确,MTA将仅立即拒绝该电子邮件。在这种情况下,您将在PHP中收到错误。但它也可以拒绝收到电子邮件或者在PHP接受电子邮件后发送失败,原因有很多,其中PHP没有任何想法,因为它已经收到了true
响应。
您的MTA将有一个错误日志,如果错误发生在本地,您可以查看更多信息。
答案 2 :(得分:1)
我遇到了这个问题,我正在使用的脚本是从同一个域发送和接收的。您是否尝试将电子邮件发送到位于其他域的电子邮件地址?这可能有助于缩小可能的问题范围。
答案 3 :(得分:1)
我们遇到了完全相同的问题。解决方案是在php.ini中设置了相应的sendmail_path。
sendmail_path =“/ usr / sbin / sendmail -t -i”
设置上述解决了问题。
答案 4 :(得分:1)
发送测试电子邮件后检查您的mail.log:
sudo tail -f /var/log/mail.log
然后,您可以看到分配给您尝试发送的上一封电子邮件的ID。例如。我明白了:
Jan 11 23:03:14 vagrant-ubuntu-trusty-64 postfix/pickup[17228]: 69F3441529: uid=33 from=<www-data>
69F3441529 是分配给该电子邮件的唯一ID。然后,您可以为具有该ID的所有行grep日志...
sudo grep 69F3441529 /var/log/mail.log
然后,您应该能够发现可能存在的任何错误消息,然后谷歌他们:)
答案 5 :(得分:0)
就我而言,将服务器设置从IPv6地址更改为IPv4地址解决了这个问题。