php头邮件头“;554不允许消息-报头不符合RFC[291]”;


php headers mail headers "554 Message not allowed - Headers are not RFC compliant[291]"

我在向yahoo.com电子邮件地址发送电子邮件时遇到问题,我从php脚本发送的邮件完全适用于我发送到的其他所有域,除了我们的一位用户坚持保留她的yahoo电子邮件。

这是我的头

    $headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "Date: $date";
$headers[] = "From: 'DSAC Events' <$from>";
$headers[] = "Reply-To:  <$replyto>"; 
$headers[] = "Subject: {$subject}";
$headers[] = "Return-Path: <$from>";
$headers[] = "X-Priority: 3";//1 = High, 3 = Normal, 5 = Low
$headers[] = "X-Mailer: PHP/" . phpversion();
mail($to, $subject, $msg, implode("'r'n", $headers));

我读过很多关于有同样问题的人的帖子,我试着添加了一个消息id和返回路径,我添加了日期:在阅读后,这可能是问题所在,其他各种事情都无济于事。

下面是一个被退回邮件源的示例。

Return-path: <>
Envelope-to: d11dsa@zeus1.easy-internet.co.uk
Delivery-date: Sat, 08 Nov 2014 14:41:32 +0000
Received: from mailnull by zeus1.easy-internet.co.uk with local (Exim 4.82)
    id 1Xn7Cm-001cxb-8a
    for d11dsa@zeus1.easy-internet.co.uk; Sat, 08 Nov 2014 14:41:32 +0000
X-Failed-Recipients: user@yahoo.com
Auto-Submitted: auto-replied
From: Mail Delivery System <Mailer-Daemon@zeus1.easy-internet.co.uk>
To: d11dsa@zeus1.easy-internet.co.uk
Subject: Mail delivery failed: returning message to sender
Message-Id: <E1Xn7Cm-001cxb-8a@zeus1.easy-internet.co.uk>
Date: Sat, 08 Nov 2014 14:41:32 +0000
This message was created automatically by mail delivery software.
A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
  user@yahoo.com
    SMTP error from remote mail server after end of data:
    host mta6.am0.yahoodns.net [63.250.192.46]: 554 Message not allowed - Headers are not RFC compliant[291]
------ This is a copy of the message, including all the headers. ------
Return-path: <d11dsa@zeus1.easy-internet.co.uk>
Received: from d11dsa by zeus1.easy-internet.co.uk with local (Exim 4.82)
    (envelope-from <d11dsa@zeus1.easy-internet.co.uk>)
    id 1Xn7Ci-001cl4-9S
    for user@yahoo.com; Sat, 08 Nov 2014 14:41:29 +0000
To: user@yahoo.com
Subject: 
X-PHP-Script: www.dsa.co.uk/eventmail.php for 2.218.47.72
MIME-Version: 1.0
Content-type: text/plain; charset=iso-8859-1
Date: Sat, 08 Nov 2014 14:41:28 +0000
From: DSACEvents <events@dsa.co.uk>
Reply-To:  <person@live.co.uk>
Subject: 
X-Priority: 3

感谢您的回复,您说得对。以下是我最终得到的完美效果。

    function generateMessageID()
{
  return sprintf(
    "<%s.%s@%s>",
    base_convert(microtime(), 10, 36),
    base_convert(bin2hex(openssl_random_pseudo_bytes(8)), 16, 36),
    $_SERVER['SERVER_NAME']
  );
}
        $headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "Mesaage-id: " .generateMessageID();
$headers[] = "From: 'DSAC Events' <$from>";
$headers[] = "Reply-To: $Arranger <$replyto>"; 
$headers[] = "Date: $date";
$headers[] = "Return-Path: <$from>";
$headers[] = "X-Priority: 3";//1 = High, 3 = Normal, 5 = Low
$headers[] = "X-Mailer: PHP/" . phpversion();

mail($to, $subject, $message, implode("'r'n", $headers));

根据错误消息,雅虎服务器似乎拒绝了来自您的域SMTP服务器的电子邮件。这可能是由以下几个原因引起的:

  • 如果程序发送的消息中没有Message-IDDate标头

  • 如果附件不遵循该文件类型的确切结构,则这些附件也被视为可疑,因此被隔离,以防它们构成任何形式的威胁。

  • 如果邮件有两个主题,则可以拒绝邮件。

我在雅虎也遇到过同样的问题。只有双重"主题"才是问题所在。干得好,对我来说很好。