我可以防止 MIME 嵌入的 html 图像显示为附件吗?
Posted
技术标签:
【中文标题】我可以防止 MIME 嵌入的 html 图像显示为附件吗?【英文标题】:Can I prevent a MIME embedded html image from appearing as an attachment? 【发布时间】:2011-10-30 20:09:15 【问题描述】:这是我用来邮寄的代码:
<?php
include('Mail.php');
include('Mail/mime.php');
$address = "Any old address will do";
$crlf = "\r\n";
$hdrs = array(
'From' => 'do-not-reply@mydomain.com',
'Subject' => 'Mail_mime test message'
);
$mime = new Mail_mime($crlf);
$mime->addhtmlImage("emailHeader.jpg", "image/jpg");
$cid=$mime->_html_images[0]['cid'];
$html = '<html><body><center><img src="cid:'.$cid.'">This image shows up just fine</center></body></html>';
$text = 'Plain text version of email';
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
$mail =& Mail::factory('mail');
$mail->send($address, $hdrs, $body);
?>
图像显示在电子邮件中,但也显示为附件。这有点笨拙,我可以阻止它吗?
【问题讨论】:
不是解决您的问题的方法,但我一直发现将您的电子邮件图像托管在网络上的某个地方并在您的源中包含完全合格的链接会更安全。不过,您需要托管。 啊哈!您的意思是将其引用为 http:// 。谢谢!那行得通。 我在从我的主机服务器上的 MailBLaster 应用程序发送 HTML 时遇到了同样的问题。这些图像在 HTML 电子邮件中显示为内联,但在 Mac Mail 和 Gmail Web 浏览器界面中都串在底部,这很丑陋。其他客户不这样做。大约六个月前开始使用相同的模板。他们改变了一些东西,我没有! 【参考方案1】:我遇到了一些邮件客户端会将所有内联图像呈现为空框的问题。
我发现如果没有提供 domainID,PEAR Mail_mime 类将尝试为您修复 Content-ID 引用。
e.g.
[HTML] src="123456.jpg"
[Headers] Content-ID: <123456.jpg>
updates to
[HTML] src="cid:123456.jpg@domain.com"
[Headers] Content-ID: <123456.jpg@domain.com>
BUT
[HTML] src="cid:123456.jpg"
[Headers] Content-ID: <123456.jpg>
updates to
[HTML] src="cid:123456.jpg"
[Headers] Content-ID: <123456.jpg@domain.com>
这会破坏 HTML 标记和 MIME 附件之间的链接。
This answer helped me out
所以在发送电子邮件之前自己在 Content-ID 中包含 domainID 是最好的解决方案。
我循环发送了几封单独的电子邮件。每封电子邮件都应该是相同的,只是标题中的收件人在每次迭代中都会发生变化。我发现第一封电子邮件发送正确,然后在第二封和后续电子邮件中看到了 Content-ID 的变化。
在 Outlook 中的初始测试没有发现问题(图像很好)。只有在 Gmail 中的测试才发现了这个故障。但是,如果 Gmail 检测到无效数据,它不会向您显示 src 属性,因此您无法仅通过检查 Gmail 中的电子邮件来查看问题。
【讨论】:
以上是关于我可以防止 MIME 嵌入的 html 图像显示为附件吗?的主要内容,如果未能解决你的问题,请参考以下文章