1

我正在使用 PHP 的mail()函数发送多部分 HTML 电子邮件。在我的 Postfix 配置中,我将 SMTP 服务器设置为 Amazon 的 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 电子邮件(不是多部分)发送时,它工作得很好。

谢谢。

4

1 回答 1

0

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

于 2014-01-28T18:38:57.173 回答