Правильная отправка email-писем на своём сайте

Опубликовано 11.11.2023

На многих сайтах мы встречаем множество форм — от обратной связи до заказов и регистрации. Важным моментом в работе с такими формами является своевременная обработка поступающей информации. Для этого удобно использовать отправку писем в телеграм или на электронную почту. Про телеграм я писал в статье Создаём простого бота телеграм для уведомлений с сайта, а в данной статье хотелось бы обсудить отправку 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 (приведен в комментарии в коде).

Важным моментом при настройке формы является борьба со спамом. Об этом читайте в статье Простая защита от спама на своём сайте.

А вы уже организовали отправку писем на своём сайте? Поделитесь опытом в комментариях к посту или в группе в телеграм.

Возникли вопросы?
Обсудим в группе: