2009-11-01 75 views
10

如何检查邮件在我的服务器上发送的问题? 我运行一个简单的测试:疑难解答PHP邮件

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

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

我该如何去追踪这个问题?

回答

13

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

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

对于德语使用者来说,前段时间我对这个问题写了一个非常详尽的“怎么办”。见here

+0

这可能是http://spamhaus.org/ – MiseryIndex 2009-11-01 19:28:09

+0

更正。谢谢。 – 2009-11-01 19:29:20

+0

未在spamhaus.org上列出(phew!) 发件人域确实属于服务器。 我试图发送到一些电子邮件帐户的所有不接收它。 (.Mac,gmail,yahoo) 我将通读日志文件。 你知道邮件日志将驻留在哪里吗? 谢谢 – 2009-11-01 22:17:40

2

从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**. 

不知道如何采取下一步,但这里是一个重要的点。

1

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

3

继迈尔斯,如果你是在Linux机器上,这样做在命令行:

# echo “Body text.” | mail -s “Hello world” [email protected] 

如果您没有收到电子邮件,您必须对那个盒子的邮件系统出了问题。这是您提出的PHP问题的另一个问题。

+0

嗯,找不到命令。 echo“正文文本”。 | mail -s“hello world”[email protected] -bash:mail:command not found – 2009-11-01 21:27:36

+0

'哪个邮件' – 2009-11-01 21:40:59

+0

怎么样 - 没有任何返回。 – 2009-11-02 00:39:24

2

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

+0

我其实也尝试过htmlMimeMail5,我觉得它也使用SMTP,但也有同样的运气。 – 2009-11-02 17:55:16

+0

该类是否具有调试模式?您应该收到SMTP错误消息,而无需检查任何日志。 PHPMailer肯定可以。 – 2009-11-02 19:11:52

1

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

我也收到了一些出站邮件,做了通过Cox邮件假脱机程序将它们传递给我之前几天。

我希望这很有帮助。