Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 03.04.2019 15:18:00

Отправка писем из Laravel с помощью SMTP через yandex.ru

Для теста настроил в системе программу ssmtp, чтобы проверить как будет уходить почта через почтовый сервер yandex.ru. Настройки следующие:

root=***@yandex.ru
mailhub=smtp.yandex.ru:465
rewriteDomain=yandex.ru
hostname=yandex.ru
AuthUser=***
AuthPass=***
UseTLS=YES

И с этими настройками почта отправляется.

Теперь пробую использовать такие же настройки в Laravel. В файле .env прописано:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.yandex.ru
MAIL_PORT=465
MAIL_USERNAME=***
MAIL_PASSWORD=***
MAIL_ENCRYPTION=tls

Однако, при отправке почты происходит ошибка:

Swift_TransportException
Connection to tcp://smtp.yandex.ru:465 Timed Out

Я пробовал другие комбинации порта и шифрования, но они тоже не работают:

465, ssl:
Swift_TransportException (553)
Expected response code 250 but got code "553", with message "553 5.7.1 Sender address rejected: not owned by auth user. "

587, ssl:
Swift_TransportException
Connection could not be established with host smtp.yandex.ru [ #0]

587, tls:
Swift_TransportException (553)
Expected response code 250 but got code "553", with message "553 5.7.1 Sender address rejected: not owned by auth user. "

Вопрос. Как заставить работать почту в Laravel через smtp?


UPD: Еще я пробовал поставить такую настройку:

MAIL_DRIVER=mail

Все остальные значения MAIL_* приравнял null. Сделал я это
в надежде, что стработает PHP-шная функция mail(), которая у меня работает с помощью настроенного ssmtp. Например, такой код работает:

<?php 
mail("sample@gmail.com", "Отправка через SSMTP агента", "Это проверка отправки"); 
?>

Но после этой настройки и сброса кеша настроек:

$ ./artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

Попытка отправки почты завершается ошибкой:

Swift_TransportException
Expected response code 220 but got an empty response

Не в сети

#2 03.04.2019 15:48:11

Re: Отправка писем из Laravel с помощью SMTP через yandex.ru

Попробуй порт 587
MAIL_PORT=587
У меня так работало

Не в сети

#3 03.04.2019 15:59:14

Re: Отправка писем из Laravel с помощью SMTP через yandex.ru

Так я же написал:

587, ssl:
Swift_TransportException
Connection could not be established with host smtp.yandex.ru [ #0]

587, tls:
Swift_TransportException (553)
Expected response code 250 but got code "553", with message "553 5.7.1 Sender address rejected: not owned by auth user. "

Не работает 587 порт.

Но еще не понятно, почему драйвер MAIL_DRIVER=mail работать не хочет, хотя простой тестовый PHP-код письмо отправляет.

Не в сети

#4 03.04.2019 16:08:47

Re: Отправка писем из Laravel с помощью SMTP через yandex.ru

Это результат того, что не указан/неправильно указан обратный адрес
Яндекс требует чтобы почта отправлялась с его реального адреса, а если вы не указали его явно, ларавель подставит там свою заглушку
config/mail.php

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],

Поэтому провпишите явно свой адрес в .env

MAIL_FROM_NAME="My Name"
MAIL_FROM_ADDRESS=myname@yandex.ru

There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 03.04.2019 16:19:08

Re: Отправка писем из Laravel с помощью SMTP через yandex.ru

Ага, я наконец нашел такое же решение тут: https://toster.ru/q/302144

В итоге настройки стали такими:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.yandex.ru
MAIL_PORT=587
MAIL_USERNAME=sample@yandex.ru
MAIL_PASSWORD=somePassword
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=sample@yandex.ru
MAIL_FROM_NAME=sample

Самое интересное, что не работает с портом 465, хотя с ним я проверяю работу через ssmtp, и там работает. Объяснения этому у меня нет. Прямо магия какая-то творится в компьютерных науках.

Не в сети

#6 12.04.2019 19:43:34

Re: Отправка писем из Laravel с помощью SMTP через yandex.ru

Не в сети

Подвал раздела