【问题标题】:Troubleshooting PHP Mail [duplicate]PHP邮件故障排除[重复]
【发布时间】:2010-12-12 02:20:27
【问题描述】:

如何检查在我的服务器上发送的邮件是否存在问题? 我运行一个简单的测试:

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

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

我该如何追踪问题?

【问题讨论】:

    标签: php linux sendmail


    【解决方案1】:

    来自 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**.
    

    不知道下一步该怎么做,但这是很重要的一点。

    【讨论】:

      【解决方案2】:

      我首先要开始的是 PHP 错误日志,然后是您的 sendmail 日志。还可以从命令行尝试 sendmail 并检查 PHP 配置以确保正确设置以发送邮件。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 应该是spamhaus.org
        • 未在 spamhaus.org 上列出(呸!)发件人域确实属于服务器。我尝试发送到许多电子邮件帐户,但都没有收到。 (.Mac、gmail、yahoo)我将浏览日志文件。您是否有机会知道邮件日志将驻留在哪里?谢谢
        • 你在什么机器/系统/平台上?
        • Apache/2.2.3 (Debian) PHP/5.2.0-8+etch13
        【解决方案4】:

        跟随 Myles,如果您使用的是 Linux 机器,请在命令行上执行此操作:

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

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

        【讨论】:

        • 嗯,找不到命令。回声“正文”。 | mail -s "hello world" richtestani@mac.com -bash: mail: command not found
        • 我想我会开始调查 sendmail,查看 psrpm -qa、典型的 sendmail 日志位置,也许是 rc.* 目录,以及我能想到的任何其他内容。可能是那里没有设置邮件?
        • 顺便说一句,您可能希望在此处删除您的第一条评论,这样您的电子邮件地址就不会比它已经获得的更多了。我会标记它以引起注意。
        • 什么也没发生。该死,我讨厌linux
        【解决方案5】:

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

        【讨论】:

        • 我实际上尝试了 htmlMimeMail5,我认为它也使用 SMTP,但运气相同。
        • 类有调试模式吗?您应该得到 SMTP 错误消息,而无需检查任何日志。 PHPMailer 绝对可以。
        【解决方案6】:

        您是在这里使用实时网络服务器,还是类似于个人开发沙箱的东西? (例如,您的家用机器?)如果是后者,我可以告诉您,我的 ISP (Cox) 过去在过滤出站邮件端口时遇到了很多问题。 (他们会告诉你他们不会那样做,但我确定他们会这样做。)

        我还收到了一些确实通过的出站邮件,这些邮件在发送给我之前在 Cox 邮件假脱机中被困了好几天。

        我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2012-11-10
          • 2014-07-22
          • 1970-01-01
          • 1970-01-01
          • 2020-10-02
          • 2015-10-08
          • 2012-09-28
          • 1970-01-01
          • 2021-02-08
          相关资源
          最近更新 更多