О web-разработке
и даже немного больше...

Настройка отправки почты в Laravel через biz.mail.ru

Сегодня это уже обычная практика: чтобы письма на сайте нормально доходили до получателя — приходится отправлять их через сторонние SMTP сервера. В ином случае, письма, отправленные с серверов хостинговых компаний, зачастую могут попадать в спам. Организовать отправку писем можно таким образом, что для конечного пользователя отправителем будет адрес с того же домена на котором крутится сайт.

Такую возможность предоставляют различные сервисы в сети. Данный пост не является рекламой сервиса. Я остановился на сервисе biz.mail.ru, т.к. был прежде положительный опыт. Тут мы рассмотрим настройку отправки писем в Laravel через сервис biz.mail.ru.

Делегирование MX-записей

Первое что следует сделать – делегировать MX-записи домена на сервера biz.mail.ru. Вообще весь процесс настройки записей DNS хорошо описан в документации. Первая проверка — вы подтверждаете, что вы владелец сайта. Далее прописываете / правите в настройках хостинга записи в DNS: MX, SPF-записи и DKIM. Это базовое что требуется для правильной работы. После того как выполните все эти манипуляции, результат будет виден в разделе состояния сервера.

Создание нового почтового ящика

Следующим шагом является создание почтового адреса под вашим доменом, делается это в разделе «Пользователи». Например, учётная запись будет вида support@ваш_домен.

Адресов может быть произвольное количество, и они будут работать как полноценные почтовые ящики. Использовать вы можете их для нужд компании, однако следует помнить, что вся корреспонденция будет находиться на серверах biz.mail.ru.

Настройка отправки в Laravel

Настроить отправку писем в Laravel через SMTP не составляет большой проблемы, т.к. уже из коробки предусмотрена такая возможность. Основной конфигурационный файл который предстоит править – «.env», располагается в корне проекта Laravel. В данном файле множество параметров, в том числе и почты. Нужно найти название параметров с префиксом MAIL_.

Далее настраиваем параметры подключения SMTP, согласно тем настройкам, которые предоставляет сервис biz.mail.ru.

  • MAIL_DRIVER – Драйвер который будет использован для отправки сообщений, указываем smtp;
  • MAIL_MAILER – Этот параметр я указывал самостоятельно (будет работать и без него);
  • MAIL_HOST – Сервер SMTP, который будет отсылать сообщения;
  • MAIL_PORT – Если используем шифрование «ssl», то указываем порт 465;
  • MAIL_USERNAME – Почтовый адрес, с которого будут отсылаться сообщения (указывается вместе с доменом);
  • MAIL_PASSWORD – Пароль от почты;
  • MAIL_ENCRYPTION – Тип шифрования, указываем «ssl» для порта 465;
  • MAIL_FROM_ADDRESS – Адрес отправитель, рекомендуется оставлять тот же, с которого отсылаются сообщения.

После сохранения файла настроек «.env» вам нужно сбросить кэш файла конфигурации.
Сделать это можно через консольную утилиту artisan:

php artisan cache:clear

Если на удалённом хостинге нет возможности работы с консолью, можно сбросить иначе, создав такой роут:

Route::get('/config-cache', function() {
     $exitCode = Artisan::call('config:cache');
     return 'Config cache cleared';
});

Открываем адрес /config-cache относительно вашего домена сайта, после чего кэш конфигурации будет сброшен и загружен с новыми настройками. Ещё один вариант, менее рекомендуемый — удаляем вручную файл: /bootstrap/cache/config.php.

Если почта не уходит

Если у вас обычный хостинг, то как правило возникает ещё одна дополнительная проблема с отправкой почтовых сообщений.
Почта не будет уходить, в ответ будет сообщение вида:

Connection could not be established with host smtp.mail.ru :stream_socket_client(): unable to connect to ssl://smtp.mail.ru:465 (Connection refused)

Сообщение может быть и другим, но суть одна, особенно если вы перепроверили все настройки подключения и уверены, что соединение должно проходить. Проблема решается обращением в ТП вашего хостинга, чтобы для вашего хоста открыли SMTP-порт. Закрывают его по умолчанию, по всей видимости от рассылки спама с их серверов.

Опубликован: 22.07.2021 г.

См. также:

Как просмотреть SQL запрос в Eloquent Laravel?
Как объявить переменную в шаблоне Laravel Blade?
Проверка на пустоту коллекций Eloquent в Laravel
Как получить URL текущей страницы в Laravel?
Как вывести роуты Laravel в отдельный файл?
Как получить случайные записи из БД в Laravel?
Ограничение выборки (LIMIT) данных в Laravel
Как перенести Laravel на боевой сервер?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта