我可以阻止MIME嵌入的html图像作为附件出现吗?

时间:2011-08-19 18:15:47

标签: php image email mime

以下是我用来邮寄的代码:

<?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);

?>

图片显示在电子邮件中,但它也会显示为附件。这有点笨重,我能预防吗?

1 个答案:

答案 0 :(得分:0)

我遇到一个问题,其中一些邮件客户端会将所有内嵌图像渲染为空框。

我发现如果没有提供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中的电子邮件来查看问题。