【问题标题】:How do I get error responce form mail server?如何从邮件服务器获得错误响应?
【发布时间】:2013-04-23 19:37:21
【问题描述】:

我正在使用 phps 邮件功能向我的用户发送电子邮件。 然而,有些用户根本没有收到它们(甚至没有被垃圾邮件过滤器接收)。 在我寻找错误的过程中,我被问到(我的用户邮件提供商的好人)我从他们的服务器得到什么响应。

但是,我不知道如何获得它。 它应该保存在我的服务器上的某个地方吗?在那种情况下在哪里? 还是由php返回?或者保存在某处的错误日志中? 或者有没有办法得到它?

我正在运行 Ubuntu 服务器并使用 postfix 处理邮件

【问题讨论】:

    标签: php email ubuntu


    【解决方案1】:

    该错误至少会出现在您的邮件服务器日志中。您邮件上的发件人地址/信封发件人是什么?任何退回邮件应该发送到该地址。如果该地址无法投递,则退回邮件也可能被退回。因此,您需要首先检查并确保您可以访问From: 标头或Return-path: 标头(如果存在)中指定的电子邮件帐户。如果它们不存在,您需要查看邮件服务器日志,postfix 通常会记录 /var/log/mail.log 但这可以更改,因此您的配置可能会有所不同。

    另一个处理退回邮件的好方法是使用类似 VERP (http://en.wikipedia.org/wiki/Variable_envelope_return_path) 可变信封返回路径。这样,您可以通过查看退回邮件的地址来自动处理退回邮件。

    【讨论】:

      【解决方案2】:

      您可以检查邮件是否发送如下:

      <?php
       $to = "recipient@example.com";
       $subject = "Hi!";
       $body = "Hi,\n\nHow are you?";
       if (mail($to, $subject, $body)) {
         echo("<p>Message successfully sent!</p>");
        } else {
         echo("<p>Message delivery failed...</p>");
        }
       ?>
      

      您也可以单独存储消息发送或失败的日志。

      【讨论】:

      • 除非地址是本地邮件服务器,或者邮件格式有问题,或者服务器问题。邮件命令很可能会返回 true。收到消息的 MTA 将尝试传递消息,此时通常会发生 3 件事。 1. 4xx(临时错误),MTA 将排队并重试传递, 2. 5XX(永久错误)MTA 将生成 NDR,并发送回 From/RP。 3. 邮件已送达。所有这些都是异步发生的,所以 php 邮件函数永远不会看到它。
      【解决方案3】:

      来自php网:

      如果 mail() 遇到错误,它只会返回 false。为了找出原因,我们 需要发现 sendmail 命令的错误所在。在 Linux 上, 这通常是 /var/log/messages。

      邮件错误不会出现在 /var/log/httpd/errors 中(因为 apache 不知道 /usr/sbin/sendmail 返回 false 是错误),也不知道 在 /var/log/mail/ 中(因为电子邮件从未到达后缀,并且 未发生 SMTP/传送错误。)

      http://php.net/manual/en/function.mail.php

      但是您可以轻松地将电子邮件的结果存储到一个变量中,如前所述,它只会是truefalse

      【讨论】:

        猜你喜欢
        • 2019-09-11
        • 2021-12-27
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-04
        • 2016-01-19
        相关资源
        最近更新 更多