如何使用zend框架发送带有内嵌图像的电子邮件?

时间:2009-07-06 16:30:34

标签: php zend-framework email inline-images

文档指定了如何添加内联附件,但是从html部分引用它的正确方法是什么?是否可以像在其他库中一样自动包含图像?

也许有人写过一些小片段并愿意分享?

3 个答案:

答案 0 :(得分:5)

这不是一件微不足道的事情,幸运的是你有人将Zend_Mail(Demo_Zend_Mail_InlineImages)子类化了,请看这里:

http://davidnussio.wordpress.com/2008/09/21/inline-images-into-html-email-with-zend-framework/

答案 1 :(得分:2)

我为邮件类

编写包装器
private function _processHtmlBody($I_html, $I_mailer, $I_data) {

$html = $I_html;
$mail = $I_mailer;

$xmlBody = new DomDocument();
$xmlBody->loadHTML($html);

$imgs = $xmlBody->getElementsByTagName('img');
$I_data['atts'] = array();

$imgCount = 0;
foreach ($imgs as $img) {   
  $imgCount++;
  $imgUrlRel = $img->getAttribute('src');

  $imgId = sha1(time() . $imgCount . $imgUrlRel);
  $html = str_replace($imgUrlRel, 'cid:' . $imgId, $html);

  $imgUrlFull = 'http://' . $_SERVER['HTTP_HOST'] . $imgUrlRel;

  $imgBinary = file_get_contents($imgUrlFull);

  $imgPart = $mail->createAttachment($imgBinary);

  $imgPart->filename    = 'image' . $imgCount . '.jpg';
  $imgPart->id = $imgId;

  $I_data['atts'][] = $imgPart;
  }
  $mail->setBodyHtml($html);

  return $html;
}

答案 2 :(得分:0)

您可以直接使用HTML将图像直接嵌入base64中,而不必扩展Zend_Mail。

这是我包含在电子邮件模板中的示例图像:

<img src="data:image/jpg;base64,<?= base64_encode(file_get_contents("/local/path/to/image.png")) ?>" />