Отправка почты на PHP

Author Автор: Роман Чернышов    Опубликовано: 22 сентября 2011

Наверняка каждый начинающий веб-программист сталкивался с функцией 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, думаю он не особо будет отличаться, но несколько новых фишек в нем появится.

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Оформить предзаказ
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка