Настройка Яндекс — почты для Laravel и модуля swiftmailer

Пришлось намедни настройки Яндекс-почту для проект ана Laravel и хотел бы поделиться опытом настройки, возможно кому-то пригодится материал.

Генерация пароля приложений для SMTP Яндекс — почты

Переходим в свой почтовый ящик и выбераем пункт «Почтовые программы». В данном разделе нужно проставить галочку рядом с пунктом «С сервера imap.yande.ru по протоколу IMAP». В способе авторизации оставляем галочку только напротив пункта «Пароли приложений и OAuth-токены»

Раздел Почтовые программы

Далее открываем страницу «Управление аккаунтом» и в разделе «Пароли и авторизации» создаем новый пароль для входа в сторонние программы. В высветившимся окне подтверждаем действие, нажав на кнопку «Включить пароли приложений»

Раздел Включить пароли приложений
Включение паролей для приложений

Чтобы создать пароль для приложения, введим пароль для своего аккаунта и он не будет передаваться сторонним сервисам

Задание пароля для Yandex SMTP

В типе приложений выбераем «Почта» и введите название для пароля. Мы вводим название сервиса, чтобы не путаться. Затем нажмите на кнопку «Создать»

Задаем название для нового аккаунта

Нам автоматом будет сгенерирован новый пароль и нужно его использовать, как «Пароль SMTP» и «Пароль IMAP» при задании параметров в .env Laravel

Новый сгенерированный пароль

Настройка параметров .env в Laravel

Дам сразу пример правильно заполненных параметров и в этом нет ничего сложно. Просто надо прописать нужные данные для нужных перменных

...
MAIL_MAILER=smtp
MAIL_HOST=smtp.yandex.com
MAIL_PORT=587
MAIL_USERNAME=mylogin@yandex.ru
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=mylogin@yandex.ru
MAIL_FROM_NAME="${APP_NAME}"
...

Список возможных ошибок

Приведу ниже 2 вида ошибок, которые мне встретились при настройке, чтобы при поиске вы попали сюда:

первая ошибка связана с тем, что модуль не может соединиться с сервером почты yandex

Зачастую это связано с тем, что указан неправильный порт или авторизационные данные. Порт нужно указать, как 587, а не 465
{message: "Connection to tcp://smtp.yandex.com:465 Timed Out", exception: "Swift_TransportException",…}
exception: "Swift_TransportException"
file: "/var/www/html/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php"
line: 475
message: "Connection to tcp://smtp.yandex.com:465 Timed Out"

вторая ошибка связана с тем, что есть доступ к хосту, но сервер не может обработать отправку сообщения

Зачастую это связано с тем, что не указан/неправильно указан обратный адрес. Яндекс требует чтобы почта отправлялась с его реального адреса, а если вы не указали его явно, Laravel подставит там свою заглушку в файле config/mail.php, т.е. парметр MAIL_FROM_ADDRESS=myname@yandex.ru нужно указать реальный в файле .env, желательно относящийся к домену *@yandex.ru
exception: "Swift_TransportException"
file: "/var/www/html/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php"
line: 459
message: "Expected response code 250 but got code \"553\", with message \"553 5.7.1 Sender address rejected: not owned by auth user. 1656960714-utTzdALh0H-psRmqtSH\r\n\""

Пожалуйста, оцените материал

Настройка Яндекс — почты для Laravel и модуля swiftmailer