0

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

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

我正在运行 Ubuntu 服务器并将 postfix 用于邮件

4

3 回答 3

2

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

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

于 2013-04-23T11:34:37.533 回答
0

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

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

于 2013-04-23T11:34:01.423 回答
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>");
  }
 ?>

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

于 2013-04-23T11:34:54.453 回答