Отправка почты на 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
Заказать работу
предложить оффер

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

Archive

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