【问题标题】:Handling mail failures using PHP?使用 PHP 处理邮件失败?
【发布时间】:2011-06-10 09:05:45
【问题描述】:

如果我通过 GMail 向这个地址nkhkhlkhlkjlkjkljlkjlk@gmail.com发送电子邮件

我收到如下错误:

向以下收件人投递永久失败

我的问题是,如果我使用 PHP mail 函数发送,我怎样才能收到退回邮件?

我的代码:

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

$to = "nkhkhlkhlkjlkjkljlkjlk@gmail.com";
$subject = "Testing";
$message = "Testing body";

mail($to, $subject, $message, $headers); 

【问题讨论】:

    标签: php email email-validation


    【解决方案1】:

    您不能仅通过使用 mail() 来检测此类错误。您必须指定一个有效的返回地址,然后连接到该邮箱(通过 IMAP 或 POP,有相应的功能)并检查是否有任何邮件被退回。请记住,退回可能需要很长时间(甚至是几个小时,由于暂时性错误),因此您必须异步执行此检查。

    【讨论】:

      【解决方案2】:

      当你使用这个时,你可以通过邮件收到消息:

      $bounce = 'test@domian.com';
      mail($to, $subject, $message, $headers,"-f $bounce");
      

      这会将所有退回邮件发送到您的地址

      【讨论】:

      • 是的,我试过了,但不能正常工作,如果你愿意,我会把代码发给你。无论如何感谢您的回答
      • “不能正常工作”,那么它有什么作用,什么不起作用呢?
      • $mail_to = "muralisherla@gmail.com, nkhkhlkhlkjlkjkljlkjlk@gmail.com";我在“收件人”中有 2 封邮件,我可以发送第一封邮件,但我没有收到第二封邮件的退回回复
      • 我现在有点困惑 :) 当你替换 mail($to, $subject, $message, $headers); $bounce = 'test@domian.com';邮件($to, $subject, $message, $headers,"-f $bounce");您是否收到错误电子邮件?
      • 我现在无法从我的工作中检查它......有时间我今晚会测试它。
      【解决方案3】:

      您可以使用PEAR MAil,它包含一个parseAddressList() 方法,用于检查电子邮件地址的服务器是否接受该电子邮件地址。它还返回有用的错误消息。

      【讨论】:

        【解决方案4】:

        PHPmail() 函数确实有一个错误状态作为函数返回值,但它不会拾取这种错误,因为它只检查电子邮件是否已发送,而不是是否已收到。

        (这是因为它需要立即将控制权返回给程序;它不能等待可能的退回消息,因为它们可能需要很长时间才能回来 - 你不希望你的程序坐下来等待五天以防邮件被退回,你会吗?)

        因此,确定邮件是否被退回的唯一方法是有一个单独的程序来检查退回邮件将发送到的邮箱。

        您可以使用邮件选项字符串中的-f 选项指定退回邮箱(有关此内容的更多信息,请参阅the PHP mail() function man page)。

        然后让一个单独的程序定期检查该邮箱是否有退回邮件,并根据需要向您报告。 (有许多 PHP 库可以让您检查邮箱;Google 会在这里提供帮助,或者查看 PEAR)

        确定是哪封电子邮件将取决于退回邮件的质量。您绝对应该能够看到预期收件人的电子邮件地址,但您可能无法分辨它是哪封电子邮件,即将它与您首先调用 mail() 函数时的特定实例相匹配。

        希望对您有所帮助。

        【讨论】:

          【解决方案5】:

          您应该通过 IMAP 或 POP3 登录到您的收件箱并解析电子邮件地址和投递错误。

          还值得一提的是,您可以指定(在发送时)自定义标头以更好地跟踪消息来源,我相信 MailChimp 和其他人这样做是为了跟踪活动等...

          【讨论】:

            【解决方案6】:

            PHP退出邮件功能后对邮件一无所知,因此无法在发送邮件的同时进行。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-10-15
              • 1970-01-01
              • 2011-03-22
              • 1970-01-01
              • 2013-10-21
              • 2011-09-27
              • 1970-01-01
              相关资源
              最近更新 更多