PEAR邮件没有发送到某些电子邮件地址

时间:2010-06-09 09:59:35

标签: php email pear

我有一个PEAR邮件脚本,用于从客户网站发送简报。我之前使用相同的代码来制作另一个新闻通讯系统,它运作良好,并用于向各种地址发送电子邮件,但我们最新的客户端还没有收到任何电子邮件。

当简报从网站发送给各个订阅者(包括gmail,hotmail,yahoo和我们自己的公司电子邮件)时,除了客户电子邮件地址之外的所有电子邮件都会正确接收电子邮件。由于他们的邮件系统和我们自己的邮件系统(从同一个托管公司运行)之间没有任何区别,我必须得出结论,这与域名有关。

电子邮件正从系统发送到地址,因为我在调用邮件输出功能时有一个存储电子邮件地址的日志文件,但新闻稿从未出现在收件箱中。我为域创建了一个新的电子邮件帐户,但也没有收到电子邮件。它不会进入垃圾邮件文件夹,因为网络邮件系统会通过向主题中添加垃圾邮件来标记垃圾邮件。

我尝试使用以下

记录是否有任何错误
$mail =& Mail::factory('mail');

foreach($subscribers as $recipient)
{
    $send_newsletter = $mail->send($recipient, $headers, $body);

    // LOG INFO
    $message = $recipient;

    if($send_newsletter)
    {
        $message .= ' SENT';
    }
    elseif(PEAR::isError($send_newsletter))
    {
        $message .= ' ERROR: '.$send_newsletter->getMessage();
    }           
    $message .= ' | ';
    fwrite($log_file,$message);
}

然而,这个简单的方法会为所有收件人返回SENT,因此理论上邮件功能没有任何问题。 [编辑 - 虽然我刚刚注意到这可能不起作用,因为我使用'邮件'类型并且错误报告似乎只适用于'sendmail'或'smtp' - 这是真的吗?)

我不太了解PEAR或邮件功能,所以我可能会遗漏一些重要的东西,但是我想到最后要发生的事情是发送电子邮件,这似乎有效,然后它应该到达客户收件箱。

当同一公司托管的其他域名可以使特定域名无法接受电子邮件时,有什么原因。

任何帮助都非常受欢迎,因为客户和我自己都对整个事情感到困惑和沮丧。

干杯

2 个答案:

答案 0 :(得分:1)

PHP的邮件功能实际上不会将电子邮件发送到收件人的邮箱。它只是将邮件发送到您服务器的实际邮件服务器软件(postfix,sendmail,exim等),这就是实际交付工作的内容。

由于大多数邮件正在通过,显然脚本正在运行。因此,请检查服务器的邮件日志(大多数类Unix系统上的/ var / log / maillog)并搜索相关的电子邮件地址。如果在将其发送到收件人的邮件服务器时出现问题,则会将其记录在那里。

交货失败的原因:

a)接收邮件服务器(客户端)非常挑剔邮件标题,而你的服务器以过于宽松的格式发送内容 b)您的服务器在一个或多个(直接或通过列出的整个网络的后果)反垃圾邮件RBL列出客户端服务器订阅 c)客户端服务器进行灰名单,服务器在灰名单超时期限到期之前放弃

无论是什么,梳理邮件服务器的日志,看看收件人的电子邮件地址发生了什么。如果它因任何原因被退回,它将被记录下来,你可以从那里开始工作。如果事实证明邮件已发送(“250 OK”类型的消息是交付状态),那么它就是客户端上的内容,您需要他们帮助调试它,因为电子邮件已成功传送到他们的系统。

答案 1 :(得分:0)

似乎在使用mail选项进行出厂设置时发生了一些事情。当我将其设置为SMTP时,它会正确地发送到所有电子邮件地址。

如果有人知道为什么会这样,请告诉我。能够对某些东西进行排序是很棒的,但更好的是要知道为什么某些东西不起作用。