PHP邮件疑难解答

时间:2009-11-01 19:16:29

标签: php linux sendmail

如何检查我的服务器上发送邮件的问题? 我进行了一个简单的测试:

if(mail($to, $subject, $message)) {
echo 'Mail Sent';
}

测试输出文本;但是,没有邮件到达。

我该如何追踪问题?

6 个答案:

答案 0 :(得分:13)

这是一个很长的故事。几个要点(假设mail()返回true并且错误日志中没有错误):

  • 发件人地址(“发件人”)是否属于您服务器上的域?如果没有,那就这样吧。
  • 您的服务器是否在黑名单上(例如,检查spamhaus.org上的IP)?这是共享主机的远程可能性。
  • 邮件是否通过垃圾邮件过滤器过滤?使用具有垃圾邮件文件夹的freemailer打开一个帐户并查找。此外,尝试将邮件发送到没有垃圾邮件过滤器的地址。
  • 您是否可能需要mail()的第五个参数“-f”来添加发件人地址? (参见PHP手册中的mail()命令)
  • 如果您有权访问日志文件,请按照上面的建议检查这些文件。
  • 您是否检查了“发件人:”地址是否有可能的退回邮件(“退回发件人”)?您还可以设置单独的“错误到”地址。

对于讲德语的人,我前段时间在这个问题上写了一篇非常详尽的“做什么”。见here

答案 1 :(得分:4)

关注Myles,如果您在Linux机器上,请在命令行上执行此操作:

# echo “Body text.” | mail -s “Hello world” you@example.com

如果您没有收到该电子邮件,则该邮箱系统上的邮件系统出现问题。这是与您提出的PHP问题不同的问题。

答案 2 :(得分:3)

从PHP手册:

Return Values

Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.

It is important to note that just because the mail was accepted for delivery, **it 
does NOT mean the mail will actually reach the intended destination**.

不确定如何采取下一步,但这是重要的一点。

答案 3 :(得分:2)

如果所有故障排除都失败了 - 现在假设mail()因未知原因返回false - 切换到PHPMailer之类的邮件脚本,允许您完全绕过mail()并直接通过SMTP连接,并提供广泛的调试模式。这样,您应该能够设置工作解决方案或找到问题的核心。

答案 4 :(得分:1)

我开始的第一个地方是PHP错误日志,然后是你的sendmail日志。还可以从命令行尝试sendmail并检查PHP配置,以确保正确设置发送邮件。

答案 5 :(得分:1)

您是在这里开展实时网络服务器,还是在个人开发沙箱的其他方面? (即你的家用机器?)如果是后者,我可以告诉你,过去我的ISP(Cox)过滤我的出站邮件端口时遇到了很多问题。 (他们会告诉你他们没有这样做,但我确实某些他们这样做。)

我还收到了一些已经通过Cox邮件假脱机捕获的出站邮件,这些邮件已经发送给我了。

我希望这有用。