
Любой 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 серверами. Данная библиотека позволит быстро организовать рассылку практически любой сложности, провести гибкую отладку работы скриптов.
Мы неоднократно использовали и продолжаем использовать данную библиотеку в своих проектах!
Всем спасибо за внимание!
