Стильная почта с картинками на PEAR

PEAR — вполне неплохая php-библиотека, хоть и достаточно тяжёлая. Определённо и в других библиотеках имеются классы работающие с рассылкой почты. А рассылка почты системой должна как правило отличатся от обычной mail() функции. Более того, модули рассылок почты зарегистрированным пользователям обычно самые сложные. И вопрос не столько в том что я ниже описываю как отсылается почта, а в том кому и в каком виде это делается.

При работе с таким модулем обычно делают такие основные регистры (понятия, коренные таблицы, классы если хотите):

  • Письмо которое включает заголовок, содержание (наверно на нескольких языках)
  • Рассылка (кому какое письмо надо отослать и прогресс этого)
  • Пользователи (не обязательно из таблицы зарегистрированных пользователей, может быть вполне список почтовых адресов)

Дальше можно усложнять тем что можно выбрать пользователей по каким-нибудь параметрам (возраст, язык, пол, группы и тп). Можно добавить слежение за тем что пользователь прочитал письмо (вставить картинку с сайта). Обязательна функция отказа от рассылки. Это наверно все знают, поэтому делюсь кодом который часто использую для собственно процесса отсылания почты.

Ещё одна особенность при авторассылке это шаблонная замена имени, ссылок, дат, цен — всего того что пользователи с издёвкой отмечают корпоративной безжизненностью. Эти замены должны быть достаточно гибкими что-бы пользователи не заметили что они дешёвый материал; Нельзя рассылать письма типа «Дорогой Ира Кузнецова», или «Дорогой Artjom..» — надо обращать внимание на язык, пол, временную зону, кодировку имени пользователя. Умную рассылку не так легко написать, но сегодня я не об этом, а только о части — о картинках.

Есть два типа внедрения картинок — со внешними ссылками (помоему наиболее приемлимый), либо с картинками которые прикреплены как ариложения (attachment). Этот второй вариант значит что картинки покажут сразу (пользователю не надо подтверждать доверие ко внешним ссылкам), но в то же время некоторые email-сервисы типа google всё-равно внизу страницы уродливо показывают эти картинки отдельно как приложения, тогда как Outlook жуёт нормально.

require_once('Mail.php');
require_once('Mail/mime.php');

$mime = new Mail_mime("\n");
$mime->addHTMLImage(sys_url.'img/stripe.gif', 'image/jpeg');
$mime->addHTMLImage(sys_url.'img/logo.gif', 'image/jpeg');
$mime->_build_params['html_charset']='UTF-8';
$mime->_build_params['text_charset']='UTF-8';
$mime->setTXTBody($arrTemplate['txt']);
$mime->setHTMLBody($strWrappedHTML);

$body = $mime->get();
$hdrs = $mime->headers(array('From' => $arrTemplate['from'], 'Subject' => $arrTemplate['subject']));

$mail =& Mail::factory('mail');
$mail->send($arrParams['email'], $hdrs, $body);

Если будете интегрировать, гляньте баги 1436 и 12216 тоже