Сегодня это уже обычная практика: чтобы письма на сайте нормально доходили до получателя — приходится отправлять их через сторонние SMTP сервера. В ином случае, письма, отправленные с серверов хостинговых компаний, зачастую могут попадать в спам. Организовать отправку писем можно таким образом, что для конечного пользователя отправителем будет адрес с того же домена на котором крутится сайт.
Такую возможность предоставляют различные сервисы в сети. Данный пост не является рекламой сервиса. Я остановился на сервисе biz.mail.ru, т.к. был прежде положительный опыт. Тут мы рассмотрим настройку отправки писем в Laravel через сервис biz.mail.ru.
Первое что следует сделать – делегировать MX-записи домена на сервера biz.mail.ru. Вообще весь процесс настройки записей DNS хорошо описан в документации. Первая проверка — вы подтверждаете, что вы владелец сайта. Далее прописываете / правите в настройках хостинга записи в DNS: MX, SPF-записи и DKIM. Это базовое что требуется для правильной работы. После того как выполните все эти манипуляции, результат будет виден в разделе состояния сервера.
Следующим шагом является создание почтового адреса под вашим доменом, делается это в разделе «Пользователи». Например, учётная запись будет вида support@ваш_домен.
Адресов может быть произвольное количество, и они будут работать как полноценные почтовые ящики. Использовать вы можете их для нужд компании, однако следует помнить, что вся корреспонденция будет находиться на серверах biz.mail.ru.
Настроить отправку писем в Laravel через SMTP не составляет большой проблемы, т.к. уже из коробки предусмотрена такая возможность. Основной конфигурационный файл который предстоит править – «.env», располагается в корне проекта Laravel. В данном файле множество параметров, в том числе и почты. Нужно найти название параметров с префиксом MAIL_.
Далее настраиваем параметры подключения SMTP, согласно тем настройкам, которые предоставляет сервис biz.mail.ru.
После сохранения файла настроек «.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-порт. Закрывают его по умолчанию, по всей видимости от рассылки спама с их серверов.