Vom: 28.11.2011

Einbetten von Bilder in einer HTML-Mail in Pimcore

Hier ein Fragment Code, mit dem man in Pimcore aus bereits bestehendem HTML-Code eine HTML-Email mit eingebetteten Bildern machen kann:

<?php

require_once('Zend/Mail.php');
$doc = new DOMDocument();
@$doc->loadHTML($body);
$tags = $doc->getElementsByTagName('img');
$counter = 0;
$mail = new Zend_Mail();

foreach ($tags as $tag) {
	$counter++;
	$body = str_replace($tag->getAttribute('src'),"cid:img_".$counter,$body);
	$tmp = array_reverse(explode("/",$tag->getAttribute('src')));
	$bildname = $tmp[0];
	$size = getimagesize(PIMCORE_DOCUMENT_ROOT . $tag->getAttribute('src'));

	if(strpos($tag->getAttribute('src'),"http://") !== false) {
		$output = file_get_contents($tag->getAttribute('src'));
	} else {
		$filename = PIMCORE_DOCUMENT_ROOT . $tag->getAttribute('src');
		$output = file_get_contents($filename);
	}
	$attachment = $mail->createAttachment(
		$output,
		$size['mime'],
		Zend_Mime::DISPOSITION_INLINE,
		Zend_Mime::ENCODING_BASE64,
		$bildname
	);
	$attachment->id = "img_".$counter;
}

$mail->setBodyText($body);
$mail->setFrom('absender@absenderbeispiel.com', 'Ein Absender');
$mail->addTo('jemand@anders.com', 'Ein Empfänger');
$mail->setSubject('Eine eMail mit eingebetteten Bildern');
$mail->setType(Zend_Mime::MULTIPART_RELATED);
$mail->send();

?>

Hierbei wird das DOMDocument benutzt, um das HTML zu parsen und die IMG-Elemente abzuarbeiten. So kann zielgerichtet das src-Attribut ausgelesen werden, um dessen Inhalt im per str_replace zu verändern.  Die URL wird zum Einbetten in die cid: Notation gewandelt, die in eMails gebraucht wird zur Identifikation des Attachment.