Как отправлять электронные письма с помощью библиотеки PHPMailer
PHPMailer является альтернативой функции mail(), которая используется гораздо чаще. Существует множество сценариев, при которых функция mail() оказывается не достаточно гибкой для PHP отправки почты.
7 преимуществ использования PHPMailer

Существует целый ряд преимуществ использования PHPMailer для отправки электронных писем.
Объектно-ориентированный подход
Функция mail() не является объектно-ориентированной, в то время как PHPMailer имеет объектно-ориентированный интерфейс.
Возможность обойтись без заголовков и избежать грязного кода
В PHPMailer вам не придется писать грязный код и создавать заголовки, как в функции mail().
Ограничения локального почтового сервера
Для функции mail() необходим локальный почтовый сервер, тогда как PHPMailer осуществляет PHP отправку почты через SMTP. Кроме этого необходимы учетные данные.
Сообщение об ошибке на нескольких языках
Библиотека PHPMailer позволяет отправлять сообщения об ошибках более чем на 40 языках.
SSL аутентификация
Библиотека PHPMailer полностью поддерживает протокол SMTP и обеспечивает аутентификацию через SSL и TLS.
Обычная текстовая версия электронных писем
PHPMailer поддерживает отправку обычного текста для почтовых клиентов без поддержки HTML.
Поддержка сообщества
Существует активное сообщество поддержки библиотеки PHPMailer, которое постоянно актуализирует ее.
Приложения
PHPMailer используется популярными CMS, такими как Joomla, Drupal и WordPress.
Установка библиотеки PHPMailer:
Библиотека может быть установлена с помощью Composer, как показано ниже:
composer require phpmailer/phpmailer
Отправка электронной почты с помощью PHPMailer на локальном веб-сервере
Скрипт отправки формы на почту PHP
<?php require_once "vendor/autoload.php"; //Объект PHPMailer
$mail = new PHPMailer; //Имя и электронный адрес отправителя
$mail->From = "from@yourdomain.com";
$mail->FromName = "Полное имя"; // Имя и электронный адрес получателя
$mail->addAddress("получатель1@example.com", "Имя получателя");//Имя получателя необязательно
$mail->addAddress("получатель1@example.com"); //Адрес на который получатель будет отвечать
$mail->addReplyTo("reply@yourdomain.com", "Ответ"); //CC и BCC
$mail->addCC("cc@example.com");
$mail->addBCC("bcc@example.com"); //Отправка HTML или обычного текста
$mail->isHTML(true);
$mail->Subject = "Тема письма";
$mail->Body = "<i>Тело письма в HTML</i>";
$mail->AltBody = "Это текстовая версия письма";
if(!$mail->send())
{
echo "Ошибка: " . $mail->ErrorInfo;
}
else { echo "Сообщение успешно отправлено";
}
if(!$mail->send())
{
echo "Ошибка: " . $mail->ErrorInfo;
}
else
{
echo "Сообщение успешно отправлено";
}
Отправка электронной почты с вложениями
Также с помощью PHPMailer можно осуществлять PHP отправку почты с вложением.
<?php
require_once "vendor/autoload.php";
$mail = new PHPMailer;
$mail->From = "from@yourdomain.com";
$mail->FromName = "Полное имя";
$mail->addAddress("получатель1@example.com", "Имя получателя"); //Предоставляем путь и имя файла вложения
$mail->addAttachment("file.txt", "File.txt");
$mail->addAttachment("images/profile.png"); //Имя файла необязательно
$mail->isHTML(true);
$mail->Subject = "Тема письма";
$mail->Body = "<i>Тело письма в HTML</i>";
$mail->AltBody = " Это текстовая версия письма ";
if(!$mail->send())
{
echo "Ошибка: " . $mail->ErrorInfo;
}
else
{
echo "Сообщение успешно отправлено";
}
Файлы File.txt и images/profile.png были прикреплены. Они находятся в одной директории. Вложения могут прикрепляться с помощью вызова объекта PHPMailer addAttachemnt. Для этого нужно вызывать объект каждый раз, когда необходимо прикрепить вложения.
При использовании SMTP
Также можно отправить электронную почту с помощью SMTP, но для этого потребуется аутентификация email с другого хоста. Например, можно создать учетную запись на Hotmail для отправки электронной почты через этот сервис. SMTP - это протокол, который отправляет запросы электронной почты к почтовому серверу, и после проверки отправляет запросы к почтовому серверу получателя.
Рассмотрим пример отправки почты с сайта PHP с использованием протокола SMTP для почтового сервера Gmail.
<?php
require_once "vendor/autoload.php";
$mail = new PHPMailer;
//Подключение отладки SMTP.
$mail->SMTPDebug = 3;
//Задаем для PHPMailer использовать SMTP.
$mail->isSMTP();
//Устанавливаем имя хоста SMTP
$mail->Host = "smtp.gmail.com";
//Устанавливаем для этого параметра значение true, если хост SMTP требует аутентификации для отправки почты
$mail->SMTPAuth = true;
//Предоставляем имя пользователя и пароль
$mail->Username = "name@gmail.com";
$mail->Password = "super_secret_password";
//Если для SMTP требует шифрование TLS, устанавливаем его
$mail->SMTPSecure = "tls";
//Устанавливаем порт TCP для подключения
$mail->Port = 587;
$mail->From = "name@gmail.com";
$mail->FromName = "Полное имя";
$mail->addAddress("name@example.com", "Имя получателя");
$mail->isHTML(true);
$mail->Subject = "Тема письма";
$mail->Body = "<i>Тело письма в HTML</i>";
$mail->AltBody = "Текстовая версия письма";
if(!$mail->send())
{
echo "Ошибка: " . $mail->ErrorInfo;
}
else
{
echo "Сообщение успешно отправлено";
}
Перед PHP отправкой почты через SMTP необходимо задать имя хоста, номер порта и шифрование. Также может потребоваться имя пользователя и пароль для аутентификации. Следует отметить, что не получится отправить письмо на Gmail, если включены два фактора аутентификации. Для этого потребуется дополнительная настройка.
Преимущество использования удаленного SMTP
Основное преимущество использования удаленного SMTP заключается в том, что для функции mail(), если для отправителя установлено не имя локального домена, сообщение будет помечено сервером получателя, как спам.
Предположим, что вы являетесь владельцем домена abc.com. Когда вы отправляете электронное письмо, то указываете себя, отправителя, как name@gmail.com, а получателя, как name@yahoo.com. После этого почтовый сервер Yahoo помечает ваше письмо, как спам.
Извлечение электронных писем с помощью POP3
PHPMailer поддерживает верификацию POP перед SMTP для отправки электронных писем. Следовательно, данная библиотека позволяет отправлять файл на почту PHP с помощью SMTP, а верификацию производить через POP. Но также можно получать письма с почтовых серверов по протоколу POP3.
Сообщения об ошибках
$mail ->ErrorInfo используется для вывода сообщений более чем на 40 языках. Для просмотра сообщений об ошибках на любом доступном языке скопируйте каталог языка из исходного кода PHPMailer в каталог проекта. Рассмотрим следующий пример, в котором для объекта PHPMailer установлен русский язык.
$mail->setLanguage("ru");
PHPMailer - это надежное решение для работы с электронной почтой
Мы рассмотрели альтернативный подход PHP для отправки электронной почты. Любой PHP-разработчик не может обойтись без реализации функции отправки электронных писем. Также для этого можно использовать сторонние сервисы. Кроме PHPMailer есть и другие альтернативы, такие как Zend mail и swiftmailer.