我可以防止MIME嵌入式HTML图像作为附件出现吗?
问题描述:
这里是我使用的邮寄代码:我可以防止MIME嵌入式HTML图像作为附件出现吗?
<?php
include('Mail.php');
include('Mail/mime.php');
$address = "Any old address will do";
$crlf = "\r\n";
$hdrs = array(
'From' => '[email protected]',
'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);
?>
的图像在电子邮件中显示出来,但它也显示了作为附件。这有点笨重,我能阻止它吗?
答
我有一个问题,一些邮件客户端会将所有内联图像渲染为空框。
我发现,如果没有提供domainID,PEAR Mail_mime类将尝试修复您的Content-ID引用。
e.g.
[HTML] src="123456.jpg"
[Headers] Content-ID: <123456.jpg>
updates to
[HTML] src="cid:[email protected]"
[Headers] Content-ID: <[email protected]>
BUT
[HTML] src="cid:123456.jpg"
[Headers] Content-ID: <123456.jpg>
updates to
[HTML] src="cid:123456.jpg"
[Headers] Content-ID: <[email protected]>
这打破了HTML标签和MIME附件之间的链接。
因此包括在内容ID自己域ID发送电子邮件之前是最好的解决方案。
我发送了几个单独的电子邮件循环。每个电子邮件的目的是与每个迭代中标题中的收件人更改相同。我发现第一封电子邮件已正确发送,然后在第二封电子邮件和后续电子邮件中看到了Content-ID的清除。
在Outlook中的初始测试没有发现问题(图像很好)。只有在Gmail中进行测试才会发现问题。但是,如果Gmail检测到无效数据,则不会向您显示src属性,因此您只能通过Inspect查看Gmail中的电子邮件才能看到问题。
不是您的问题的解决方案,但我总是发现将您的电子邮件图像存放在网络上更安全,并且在源代码中拥有完全限定的链接。不过,你需要托管。 –
啊哈!您的意思是将其作为http://引用。谢谢!这工作。 – Tzshand
我的主机服务器上的MailBLaster应用程序发送了HTML相同的问题。图像以内嵌方式显示在HTML电子邮件中,但在Mac Mail和Gmail Web浏览器界面中都显得很丑陋。其他客户不这样做。也许六个月前开始发生同样的模板。他们改变了一些,我没有! –