Правильная отправка email-писем на своём сайте
На многих сайтах мы встречаем множество форм — от обратной связи до заказов и регистрации. Важным моментом в работе с такими формами является своевременная обработка поступающей информации. Для этого удобно использовать отправку писем в телеграм или на электронную почту. Про телеграм я писал в статье Создаём простого бота телеграм для уведомлений с сайта, а в данной статье хотелось бы обсудить отправку email писем через smtp.
Для отправки писем можно использовать несколько вариантов. Основные из них:
- Отправка через функцию mail() в php. Плохой вариант, так как письма будут теряться или попадать в спам. У большинства хостинг-провайдеров заблокирована такая отправка или стоит жесткое ограничение на количество.
- Отправка через сторонний сервис. Для этого можно использовать такие сервисы, как Unisender или SendPulse. У них есть платные и бесплатные тарифы, а также придётся повозиться с интеграцией через api и настройкой отправителей.
- Отправка через smtp с реального ящика. Этот вариант лишён недостатков двух предыдущих вариантов.
Подготовка email
Почтовые провайдеры, такие как Mail.ru или Яндекс, требуют создать отдельный пароль для внешних приложений. В Mail.ru это делается по пути Профиль > Пароль и безопасность > Пароли для внешних приложений. В Яндексе Аккаунт > Безопасность > Пароли приложений.
На отправку писем есть ограничения, поэтому не получится делать массовую рассылку. Для mail.ru это 1 письмо в минуту. Для Яндекса 150 писем в сутки.
Подключение библиотеки
Для отправки писем будем использовать библиотеку PHPMailer. Сделайте импорт через composer, используя команду:
composer require phpmailer/phpmailer
Отправка
use PHPMailer\PHPMailer\PHPMailer;
//Отправитель
$email = "mrahab@mail.ru";
$pass = "XXXXXXXXXXXXXXXXXXXX"; //Пароль для внешних приложений
$name = "Имя отправителя";
$subject = "Тема письма";
$body = "Текст сообщения"; //Можно html
//Получатель
$to_email = "admin@mail.ru";
$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->SMTPDebug = 0;
$mail->Host = 'ssl://smtp.mail.ru';
//$mail->Host = 'ssl://smtp.yandex.ru';
$mail->Port = 465;
$mail->Username = $email;
$mail->Password = $pass;
$mail->setFrom($email, $name);
$mail->addAddress($to_email);
$mail->Subject = $subject;
$mail->msgHTML($body);
// Прикрепить файл
//$mail->addAttachment('path_to_file.jpg');
//Отправка
$mail->send();
Внимание! Пример приведён для отправки через mail.ru, если используете Яндекс, не забудьте поменять $mail->Host (приведен в комментарии в коде).
Важным моментом при настройке формы является борьба со спамом. Об этом читайте в статье Простая защита от спама на своём сайте.
А вы уже организовали отправку писем на своём сайте? Поделитесь опытом в комментариях к посту или в группе в телеграм.
Обсудим в группе: