Любой backend программист php сталкивается с задачей автоматизации почтовой рассылки на веб сайтах и многие, кто сталкивался с данной задачей впервые, вставали перед ключевым вопросом: "Писать или не писать smtp клиент с нуля?". Если вы решите самостоятельно реализовать функционал smtp клиента на языке php, да и любом другом аналогичном языке, то вы столкнетесь с весьма рутинной и скучной работой, т.к. основный механизм работы с smtp серверами заключается в обмене текстовыми сообщениями и ничем больше. Но, к счастью, этого и не требуется! Все что нужно, уже написано в герое сегодняшней статьи — класс PHPMailer.
Класс PHPMailer дает нам возможность легко и быстро писать скрипты рассылки почтовых уведомлений с гибкой системой отладки данного скрипта. Скрипт написан на языке программирования PHP и поддерживает стандарты криптографического шифрования при обмене сообщениями с сервером TLS\SSL.
Для использования PHPMailer на своем сервере вам необходима возможность подключения к внешним SMTP серверам при помощи PHP.
Возможности SMTP клиента PHPMailer.
- Отправка E-mail с множественными адресатами;
- Поддерживает 8 бит, base64, бинарного режима, и пригодного для печати формата;
- SMTP авторизация на стороне сервера;
- Перенос слов (word wrap);
- Отправлять сообщения в виде HTML;
- Библиотека проверена на множестве SMTP серверах: Sendmail, qmail, Postfix, Imail, Exchange, Mercury, Courier;
- Работает на любой win32 и *nix платформе;
- Гибкость отладочной работы - реализована система вывода подробнейшего лога общения с SMTP сервером;
- Определяемые вручную заголовки писем;
- Совмещение нескольких сообщений и вложений;
- Встроенная поддержка изображений.
- Отправка писем различными способами: через smtp сервер, утилитой sendmail и Qmail, функцией mail()
Установка и первоначальная подготовка SMTP клиента PHPMailer к работе
Прежде всего необходимо скачать свежую версию SMTP библиотеки: https://github.com/PHPMailer/PHPMailer
Затем распаковываем скачанный архивчик и изучаем содержимое SMTP библиотеки PHPMailer:
/docs: // Директория с документацией библиотеки PHPMailer
/examples: // Директория с примерами работы библиотеки PHPMailer
/extras: // Дополнительные полезности при работе с почтовыми серверами
/language: // Директория с переводом Debug
/test: // Скрипты тестирование библиотеки PHPMailer
class.phpmailer.php // Класс для создания и отправки писем различными методами
class.pop3.php // Класс для работы с POP3
class.smtp.php // Класс для работы с SMTP
PHPMailerAutoload.php // Файл автоматической подгрузки классов PHPMailer
Все остальное не несет функциональной нагрузки и предоставляется в качестве информационного дополнения к библиотеке PHPMailer.
Ура! Теперь мы знаем что мы имеем при распаковке библиотеке. Дело осталось за малым — разобраться как с этим делом работать!
Многие любят создавать дополнительно файл конфигурации для SMTP клиента PHPMailer и в дальнейшем использовать его. Я тоже приверженец этой традиции и предлагаю на рассмотрение пример такого файла.
config.php:
$__smtp = array(
"host" => 'smtp.host.com', // SMTP сервер
"debug" => 2, // Уровень логирования
"auth" => true, // Авторизация на сервере SMTP. Если ее нет - false
"port" => '25', // Порт SMTP сервера
"username" => 'mail@host.com', // Логин запрашиваемый при авторизации на SMTP сервере
"password" => '123', // Пароль
"addreply" => 'reply@host.com', // Почта для ответа
"secure" => 'ssl', // Тип шифрования. Например ssl или tls
"mail_title" => 'Заголовок вашего письма!', // Заголовок письма
"mail_name" => 'Имя отправителя' // Имя отправителя
);
Заливаем все это богатство на наш хостинг и готовимся к первой инициализации и пробной отправке первого письма при помощи SMTP клиента PHPMailer.
Подключаем и инициализируем класс PHPMailer
Для подключения класса PHPMailer необходимо подключить файлы PHPMailerAutoload.php и config.php:
require_once('/путь/до/файла/config.php'); //Файл конфигурации для вашего smtp сервера
require_once('/путь/до/файла/PHPMailerAutoload.php'); //Файл автоматической подгрузки классов PHPMailer
Далее происходит процесс конфигурации SMTP клиента PHPMailer и отправка письма. Пример конфигурации вы можете посмотреть в директории с примерами /examples или воспользоваться нашим примером конфигурации и отправки письма при помощи класса PHPMailer.
Пример конфигурации SMTP клиента PHPMailer:
Данный пример демонстрирует работу библиотеки PHPMailer в качестве SMTP клиента.
require_once('/путь/до/файла/config.php'); //Файл конфигурации для вашего smtp сервера
require_once('/путь/до/файла/PHPMailerAutoload.php'); //Файл автоматической подгрузки классов PHPMailer
try{
$mail = new PHPMailer(true); // Создаем экземпляр класса PHPMailer
$mail->IsSMTP(); // Указываем режим работы с SMTP сервером
$mail->Host = $__smtp['host']; // Host SMTP сервера: ip или доменное имя
$mail->SMTPDebug = $__smtp['debug']; // Уровень журнализации работы SMTP клиента PHPMailer
$mail->SMTPAuth = $__smtp['auth']; // Наличие авторизации на SMTP сервере
$mail->Port = $__smtp['port']; // Порт SMTP сервера
$mail->SMTPSecure = $__smtp['secure']; // Тип шифрования. Например ssl или tls
$mail->CharSet="UTF-8"; // Кодировка обмена сообщениями с SMTP сервером
$mail->Username = $__smtp['username']; // Имя пользователя на SMTP сервере
$mail->Password = $__smtp['password']; // Пароль от учетной записи на SMTP сервере
$mail->AddAddress('whoto@example.com', 'John Doe'); // Адресат почтового сообщения
$mail->AddReplyTo($__smtp['addreply'], 'First Last'); // Альтернативный адрес для ответа
$mail->SetFrom($__smtp['username'], $__smtp['mail_title']); // Адресант почтового сообщения
$mail->Subject = htmlspecialchars($__smtp['mail_title']); // Тема письма
$mail->MsgHTML('Текст сообщения!'); // Текст сообщения $mail->Send(); return 1;
} catch (phpmailerException $e) {
return $e->errorMessage();
}
Поздравляю! Теперь вы имеете четкое представление о возможностях SMTP библиотеки PHPMailer и готовы к реализации любых почтовых рассылок при помощи языка программирования PHP!
Выводы
Мы рекомендуем библиотеку PHPMailer в качестве простого и надежного класса для работы с SMTP серверами. Данная библиотека позволит быстро организовать рассылку практически любой сложности, провести гибкую отладку работы скриптов.
Мы неоднократно использовали и продолжаем использовать данную библиотеку в своих проектах!
Всем спасибо за внимание!