Создание и отправка почтовых сообщений
В PHP есть лишь самое минимальное и низкоуровневое средство для работы с почтой - функция mail. Потом, правда, появилась еще mb_send_mail (для мультибайтных кодировок), которая не столько помогла, сколько внесла сумятицу. Формировать тело письма изначально предлагалось самостоятельно, что является далеко не тривиальной задачей, особенно если требуется multipart-сообщение с аттачами. Кроме этого желательно, чтобы письмо соотвествовало установленным стандартам. Тот факт, что современные почтовые клиенты великодушно не обращают внимания на небольшие несоответсвия стандартам, отнюдь не означает, что они будут делать это и в будущем.
В TAO существет мощное средство для создания и отправки почтовых сообщений. Итак, последовательно приводим примеры использования:
Создание простого письма
Core::load('Mail'); $mail = Mail::Message() ->subject('Привет!') ->from('info@mysite.com') ->to('infо@miсrоsоft.соm') ->text('Пришлите нам, плиз, исходники WindowsXP');
Это будет простое text/plain письмо. Но при этом в полном соответствии стандартам. Однако, несерьезно посылать письмо в текстовом формате. Хотим послать в HTML. Для этого вместо метода text воспользуемся методом html.
Создание HTML письма
Core::load('Mail'); $mail = Mail::Message() ->subject('Привет!') ->from('info@mysite.com') ->to('infо@miсrоsоft.соm') ->html('<html><body>Пришлите нам, плиз, исходники WindowsXP</body></html>');
В доказательство серьезностей наших намерений мы хотим аттачем прислать красивую картинку. Для этого нам нужно создать multipart-сообщение.
Создание multipart/mixed письма
Core::load('Mail'); $mail = Mail::Message() ->subject('Привет!') ->from('info@mysite.com') ->to('infо@miсrоsоft.соm') ->multipart_mixed() ->html_part('<html><body>Пришлите нам, плиз, исходники WindowsXP</body></html>') ->file_part('./image/rose.jpg');
Но нам и этого мало. Мы хотим, чтобы красивая картинка была не просто аттачем, а непосредственно отображалась в теле HTML-сообщения. Для этого, во-первых, нужно, чтобы письмо было multipart/related. Это просто: воспользуемся методом multipart_related вместо multipart_mixed. А во-вторых, нужно указать дополнительные параметры аттача - Content-ID и Content-Disposition. А вот с этим сложнее. Дело в том, что метод file_part создан для упрощения процесса и обладает ограниченным функционалом. Поэтому в этом примере воспользуемся более низкоуровневым средством для создания части multipart-сообщения.
Создание multipart/related письма
Core::load('Mail'); $mail = Mail::Message() ->subject('Привет!') ->from('info@mysite.com') ->to('infо@miсrоsоft.соm') ->multipart_related() ->html_part('<html><body>Пришлите нам, плиз, исходники WindowsXP<br /><img src="cid:rose" /></body></html>') ->part( Mail_Message::Part() ->file('./image/rose.jpg') ->content_id('<rose>') ->content_disposition('inline') );
Создание вложенных писем
Иногда возникает задача сформировать письмо довольно сложной структуры. Например письмо со вложенными картинками (отображаемые в письме) и приклепленными файлами. Возникает путаница какой тип выставить письму, с одной стороны multipart/related т.к. у нас html письмо со строенными картинками, с другой multipart/mixed т.к.
у нас есть прикрепленный файлы. Правильный ответ будет: и то и другое.
Core::load('Mail'); $mail = Mail::Message() ->multipart_mixed() ->subject('Тест') ->from('info@test.ru') ->part(Mail::Message() ->multipart_related() ->html_part('Тест') //инлайн файлы и т.д. ) ->file_part('aa.gif') ->to('info@mysite.ru');
Структура может быть и более сложной, например mixed -> alternative -> related и т.д.
Отправка письма
Чтобы отправить созданное почтовое сообщение, необходимо просто вызвать его метод send:
$mail->send();