Zend Mail как вложить изображение в письмо

Есть два варианта добавить картинку в почтовое html сообщение.
1. Использовать удаленный сервер для загрузки сообщения.
2. Вложить сообщение в письмо и ссылаться на него в html документе.
Первый способ очень простой и не требует программирования:

PHP:
  1. <img src="http://somededicateserver.com/images/logo.gif" />

Второй способ сложнее и для его реализации нам необходимо сначала добавить изображение в сообщение, а потом в сообщении сделать ссылку на это изображение.
Пример, добавляем изображение в вложения письма:

PHP:
  1. $html = $this->_request->getParam('html','');//в html у нас храниться исходный HTML код сообщения
  2. $mail = new Zend_Mail('UTF-8');
  3. //убедитесь, что файл существует и доступен для чтения
  4. $filename = '/path/htdocs/img/logo.gif';
  5. if (is_readable($filename)) {
  6.   $mail->setType(Zend_Mime::MULTIPART_RELATED);   
  7.   $at = $mail->createAttachment(file_get_contents($filename))
  8.   $at->type = 'image/gif'
  9.   $at->disposition = Zend_Mime::DISPOSITION_INLINE
  10.   $at->encoding = Zend_Mime::ENCODING_BASE64
  11.   $at->id = 'cid_' . md5_file($filename);
  12.   $html = str_replace('file://attached_image''cid:' . $at->id$html);   
  13. }
  14. $mail->setBodyHtml($html, 'UTF-8', Zend_Mime::ENCODING_8BIT);

Внутри html сообщения у нас есть специальная строка (file://attached_image), ссылка на изображение:

PHP:
  1. <img src="file://attached_image" />

которая, после обработки, будет заменена на вложенное в письмо изображение, и будет иметь следующий вид:

PHP:
  1. <img src="cid:cid_4b3fdb60e9422ce97926cc8d3b601188" />

Все, отправляем письмо и проверяем результат.

Leave a Reply