如何从邮件服务器获得错误响应?

时间:2013-04-23 11:27:48

标签: php email ubuntu

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

然而,我不知道如何做到这一点。 它应该保存在我服务器的某个地方吗?在那种情况下? 或者它是由PHP返回的?或者保存在某个错误日志中? 或者甚至有办法得到它?

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

来自php net:

  

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

     

邮件错误不会在/ var / log / httpd / errors中结束(因为apache   不知道/ usr / sbin / sendmail返回false是一个错误),也不知道   在/ var / log / mail /中(因为电子邮件从来没有到postfix,和   没有发生SMTP /传递错误。)

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

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

答案 2 :(得分:0)

您可以检查是否发送了邮件,如下所示:

<?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>");
  }
 ?>

此外,您可以单独使用alog,即存储消息发送或失败。