如何检查在我的服务器上发送的邮件是否存在问题?我运行一个简单的测试:
if(mail($to, $subject, $message)) {
echo 'Mail Sent';
}
测试输出的文本;但是,没有邮件到达。
我该如何追踪问题?
这是一个很长的故事。几个要点(假设 mail() 返回 true 并且错误日志中没有错误):
对于讲德语的人,我前段时间就这个问题写了一篇相当详尽的“做什么”。见这里。
跟随 Myles,如果您使用的是 Linux 机器,请在命令行上执行此操作:
# echo “Body text.” | mail -s “Hello world” you@example.com
如果您没有收到该电子邮件,则说明该邮箱的邮件系统存在问题。这与您提出的 PHP 问题不同。
来自 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**.
不知道如何采取下一步,但这是重要的一点。
如果所有故障排除失败 - 现在假设 mail() 由于未知原因返回 false - 切换到像PHPMailer这样的邮件脚本,它允许您完全绕过 mail() 并直接通过 SMTP 连接,并提供广泛的调试模式。这样,您应该能够建立一个可行的解决方案或找到问题的核心。
我首先要开始的是 PHP 错误日志,然后是您的 sendmail 日志。还可以从命令行尝试 sendmail 并检查 PHP 配置以确保正确设置以发送邮件。
您是在这里使用实时网络服务器,还是更多类似于个人开发沙箱的东西?(例如,您的家用机器?)如果是后者,我可以告诉您,过去我的 ISP (Cox) 过滤出站邮件端口时遇到了很多问题。(他们会告诉你他们不会那样做,但我敢肯定他们会这样做。)
我还收到了一些出站消息,这些消息确实通过了在 Cox 邮件假脱机中被捕获了好几天,然后才交付给我。
我希望这会有所帮助。