Отправка почты на PHP
Наверняка каждый начинающий веб-программист сталкивался с функцией PHP mail(), которая служит для отправки почты на e-mail пользователя. Работая на прямую с данной функцией, очень часто приходится самостоятельно подготавливать и передавать все заголовки письма, содержащие множество служебной информации. В большинстве случаев все происходит без каких либо неожиданностей, но бывают и исключения. Как правило самостоятельно составление заголовков, подготовка тела письма и последующая его отправка может сопровождаться ошибками в кодировке письма, его формате и т.д.
Пример работы функции mail():
<?php mail("support@example.com", "Тема письма", "Строка 1\n Строка 2\n Строка 3"); ?> |
Следующий пример более расширен, в него добавлена работа с заголовками письма:
<?php $to = "user1@example.com>, " ; $subject = 'Тема письма'; $to .= "user2@example.com>"; $message = ' <html> <head></head> <body> <p>Это письмо отправлено всем пользователям нашего портала!</p> </body> </html>'; $headers = "Content-type: text/html; charset=windows-1251 \r\n"; // Тип писма HTML, в кодировке windows-1251 $headers .= "From: Администрация сайта <admin@example.com>\r\n"; $headers .= "Bcc: archive@example.com\r\n"; mail($to, $subject, $message, $headers) ?> |
Такой способ отправки весьма удобен, при выполнении небольших скриптах или системах. Когда надежность и удобство использования стоит на втором и более, месте. И как я говорил ранее, в такой реализации отправки письма может быть допущена ошибка. Например если мы пошлем такое письмо, с указанными выше заголовками на почтовый ящик @yahoo.com, то всего скорее оно придет к нам в нечитабельном виде. Вместо текста мы увидим множество иероглифов. связано это в первую очередь с тем, что мы указали кодировку windows-1251, русскоязычные символы которай не корректно обрабатываются сервисом @yahoo.com
Но если мы планируем подойти к вопросу организации почтовых рассылок в нашем проекте более серьезно, то следует использовать для этих целей решение реализованное в классе PHP. Отправка почты с помощью специально подготовленного класса, может выглядеть следующим образом:
include "libmail.php"; $m= new Mail('windows-1251'); // можно сразу указать кодировку, можно ничего не указывать ($m= new Mail;) $m->From( "asd@asd.com" ); // от кого $m->To( "kuda@asd.ru" ); // кому $m->Subject( "тема сообщения" ); //$m->charset("UTF-8"); // кодировка письма $m->Body("Сообщение. Текст письма"); $m->Cc( "kopiya@asd.ru"); // кому отправить копию письма $m->Bcc( "skritaya_kopiya@asd.ru"); // кому отправить скрытую копию $m->Priority(4) ; // установка приоритета $m->Attach( "/toto.gif", "", "image/gif" ) ; // прикрепленный файл типа image/gif. типа файла указывать не обязательно $m->smtp_on("smtp.asd.com","login","passw", 25, 10); // используя эу команду отправка пойдет через smtp $m->Send(); // отправка echo "Письмо отправлено, вот исходный текст письма:<i>", $m->Get(), "</i>"; |
В этом примере все достаточно расписано, процесс отправки прост и понятен. Ксе заголовки письма формируются автоматически, кодировка письма UTF-8, хотя вы всегда можете указать свою. Так же поддерживаются вложения в теле письма, таким образом, что вы можете прикрепить файл или несколько файлов если это понадобится.
Сам же класс вы можете скачать по данной ссылке, в его коде все достаточно хорошо прокомментировано, так, что ядумаю проблем у вас с ним не возникнет. Класс работает с PHP 4 и выше, в ближайшее время выложу переработанный класс для PHP 5, думаю он не особо будет отличаться, но несколько новых фишек в нем появится.

Автор: 






