几天前,当我使用 mail()
时,我让它工作了。
但是现在不行了。而且我不知道问题出在哪里。
$to = 'testmail@gmail.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: sender@gmail.com' . "\r\n" .
'Reply-To: sender@gmail.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
$mail_sent = @mail( $to, $subject, $message, $headers );
echo $mail_sent ? "Mail sent" : "Mail failed";
它显示“邮件已发送”。
我没有触及 Apache 或这段代码中的任何内容。我在一个空的 PHP 文件中测试了代码,结果相同。我该如何调试这个问题?
最佳答案
会不会是电子邮件发送正常,但被垃圾邮件过滤器拦截了? 如果可以的话,请允许我cross-post myself :
几个要点(假设 mail() 返回 true 并且错误日志中没有错误):
- 发件人地址(“发件人”)是否属于您服务器上的域?如果没有,就让它成为现实。
- 您的服务器是否在黑名单中(例如检查 spamhaus.org 上的 IP)?这是共享主机的一个遥远的可能性。
- 邮件是否被垃圾邮件过滤器过滤?在有垃圾邮件文件夹的免费邮寄者处开设一个帐户并找出答案。另外,尝试将邮件发送到没有垃圾邮件过滤器的地址。
- 您可能需要 mail() 的第五个参数“-f”来添加发件人地址吗? (请参阅 PHP 手册中的 mail() 命令)
- 如果您有权访问日志文件,当然要按照上面的建议进行检查。
- 您是否检查“发件人:”地址是否存在可能的退回邮件(“退回给发件人”)?您还可以设置一个单独的“错误地址”。
对于讲德语的人,我前段时间就这个问题写了一篇相当详尽的“该怎么做”。参见 here .
关于PHP 邮件停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1892409/