PHP邮件头中添加了额外的空格

时间:2013-11-09 01:34:36

标签: html-email php amazon-ses

我正在使用PHP的mail()函数发送多部分HTML电子邮件。在我的Postfix配置中,我的SMTP服务器设置为亚马逊的SES。这是用于发送电子邮件的PHP:

$boundary = uniqid("HTMLDEMO");

$headers  = "From: me@mydomain.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/alternative; boundary = ".$boundary."\r\n\r\n";

// plain text
$content  = "--".$boundary."\r\n" .
            "Content-Type: text/plain; charset=ISO-8859-1\r\n" .
            "Content-Transfer-Encoding: base64\r\n\r\n" .
            chunk_split(base64_encode($plaintext_message));

// HTML
$content .= "--".$boundary."\r\n" .
            "Content-Type: text/html; charset=ISO-8859-1\r\n" .
            "Content-Transfer-Encoding: text/html \r\n\r\n" .
            "<html><body>".$html_message."</body></html>";

//send message
mail($to, $subject, $content, $headers);

当我回复消息内容时,这就是我在浏览器中看到的内容:

--HTMLDEMO527d8d851e72f
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: base64

VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCB2ZXJzaW9uIQ==
--HTMLDEMO527d8d851e72f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: text/html

<html><body><p>My message here.</p></body></html>

但是当我在Gmail中查看邮件来源时,我现在看到了这一点(包括邮件标题):

From: me@mydomain.com
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary = HTMLDEMO527d8d851e72f
Message-ID: <blah-blah-blah@email.amazonses.com>
Date: Sat, 9 Nov 2013 01:19:02 +0000
X-SES-Outgoing: 2013.11.09-12.34.5.67

--HTMLDEMO527d8d851e72f

Content-Type: text/plain; charset=ISO-8859-1

Content-Transfer-Encoding: base64



VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCB2ZXJzaW9uIQ==

--HTMLDEMO527d8d851e72f

Content-Type: text/html; charset=ISO-8859-1

Content-Transfer-Encoding: text/html

多部分标题现在是双倍行距,导致HTML显示为纯文本。 SES显然正在修改消息标题(它添加了Message-IDDateX-SES-Outgoing),那么这也可能是多部分标题中额外空格的罪魁祸首吗?当我从非亚马逊服务器发送相同的电子邮件时,它会正常显示并按照它应该呈现HTML。

此外,当我将其作为简单的HTML电子邮件(而非多部分)发送时,它的工作正常。

感谢。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我通过将行尾字符更改为'\ n'而不是'\ r \ n'来解决此问题。