使用 PEAR 的 Mail_Mime 时,附加 HTML 图像时文本部分不起作用

Posted

技术标签:

【中文标题】使用 PEAR 的 Mail_Mime 时,附加 HTML 图像时文本部分不起作用【英文标题】:When using PEAR's Mail_Mime, the text portion doesn't work when attaching HTML images 【发布时间】:2011-09-02 17:19:01 【问题描述】:

我使用的是最新版本的PEAR mail_mime module,但遇到了一个奇怪的问题。将 html 图像附加到电子邮件时,文本部分停止正常工作。我所说的“无法正常工作”的意思是,如果我尝试在 Thunderbird 中将消息视为文本(或在 PINE 中查看消息),它不会显示我设置为电子邮件的“文本”部分的内容;它尝试以文本可读的方式解析 HTML 信息。 HTML 部分中的所有内容都按预期工作。

这是我的精简代码:

//Headers
$headers['From'] = "from@address.com";
$headers['To'] = "to@address.com";
$headers['Subject'] = "A MIME Email";

//Text Portion
$text = "This is the text portion.";

//HTML Portion
$html = "<html><body><p><img src='image.png' />This is the HTML portion.</p></body></html>";

//Set up the MIME email
$mime = new Mail_mime(array('eol' => "\r\n"));
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addHTMLImage("/path/to/image.png", "image/png");

//Prepare the message to be sent
$body = $mime->get();
$headers = $mime->headers($headers);

//Send the message via SMTP
$mail_obj =& Mail::factory('smtp', array('host' => 'smtp.server.com', 'port' => 25));
$mail_obj->send("to@address.com", $headers, $body);

如果我注释掉 addHTMLImage 行,电子邮件的文本部分会按预期工作,并且我可以看到我为非 HTML 视图设置的内容。但是,如果我取消注释该行,则文本部分会失败。查看我的消息来源,我可以看到文本部分始终存在。

以下是与此问题相关的消息来源部分:

Date: Thu, 26 May 2011 10:39:24 -0500 (CDT)
From: From Address <from@address.com>
Subject: A MIME Email
To: to@address.com
Message-id: <20110526153924.0C12120697@smtp.server.com>
MIME-version: 1.0
Content-type: multipart/alternative;
 boundary="=_e107860f353617028a0059317ce51c1f"
Original-recipient: rfc822;to@address.com

--=_e107860f353617028a0059317ce51c1f
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
 charset=ISO-8859-1

This is the text portion.
--=_e107860f353617028a0059317ce51c1f
Content-Type: multipart/related;
 boundary="=_52fd7475fcf0abd310b6a38cd33f5c46"

--=_52fd7475fcf0abd310b6a38cd33f5c46
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
 charset=ISO-8859-1

<html><body><p><img src='cid:3c0db5d0a50b8752771f64048f527338' />This is th=
e HTML portion.</p></body></html>

--=_52fd7475fcf0abd310b6a38cd33f5c46
Content-Transfer-Encoding: base64
Content-ID: <3c0db5d0a50b8752771f64048f527338>
Content-Type: image/png;
 name=background.png
Content-Disposition: inline;
 filename=background.png

iVBORw0KGgoAAAANSUhEUgAAAAEAABOICAYAAABwnAfKAAAAkUlEQVR42u3WSwrAIAwFwND7X9d1
eoHSb9TSzmYQSV5AXCRaa7lEROySJ+8uFd+8q2l73FEdkJNSRgR07q0uuVncJWBY6I9OWy85bKRB
7xo04TN8/vTO0OriziWFvcMCJqTMCui8rj5fuyMz43i1BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAIB/swItzir5J/ImiQAAAABJRU5ErkJggg==
--=_52fd7475fcf0abd310b6a38cd33f5c46--

--=_e107860f353617028a0059317ce51c1f--

我不知道如何解决这个问题。有没有人遇到过类似的问题或有什么建议?

【问题讨论】:

【参考方案1】:

这是您的邮件阅读器。如果启用 HTML 邮件,它会隐藏文本邮件。在 gmail 中,您可以查看详细信息,也可以在仅限文本电子邮件的阅读器中查看

【讨论】:

...所以您发现问题出在您的邮件阅读器上...只是说。 我们发现它是邮件阅读器 (Thunderbird),但不是因为您所说的原因。 Thunderbird 可以切换到不同的视图模式。 Thunderbird 挂断不遵循 Content-Type 大写模式的 ABNF 字符串。 (例如,Content-type 导致 Thunderbird 在高级 MIME 电子邮件上失败。)在其他邮件客户端中,我们的 MIME 电子邮件的替代文本有效。 (P.S. 编辑了您的答案以取消投票)

以上是关于使用 PEAR 的 Mail_Mime 时,附加 HTML 图像时文本部分不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PEAR Mail、Mail_Mime 和 headers() 覆盖

使用 PEAR 邮件发送测试消息时出现错误消息

带有附件的梨邮件在 $mime = new Mail_mime 处失败

使用 Mail_Mime 将附件发送到 GMail,接收“无名”附件

PHP Mail_Mime:如何在电子邮件正文中正确使用 encodeHeader()

如何在 php 中解析 .eml 文件?