Разработка/ PHP/ Laravel

Настройка SMTP-почты в Laravel

Рабочий вариант для 465

Чаще всего для почтового ящика на своём домене срабатывает SMTP на порту 465 с SSL. В .env:

MAIL_MAILER=smtp
MAIL_HOST=mail.your-domain.com
MAIL_PORT=465
MAIL_USERNAME=info@your-domain.com
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=info@your-domain.com
MAIL_FROM_NAME="Your Site"

MAIL_FROM_ADDRESS лучше держать тем же адресом, что и MAIL_USERNAME. Некоторые почтовые серверы режут отправку, если авторизация идёт одним ящиком, а отправитель подставлен другой.

Вариант для 587

Если провайдер даёт порт 587, обычно меняются только порт и шифрование:

MAIL_PORT=587
MAIL_ENCRYPTION=tls

Остальные значения — хост, логин, пароль и отправитель — остаются такими же.

Если в config/mail.php нет MAIL_ENCRYPTION

В новых Laravel-конфигах SMTP может быть настроен через MAIL_SCHEME, а не через MAIL_ENCRYPTION. Тогда для порта 465 используйте:

MAIL_SCHEME=smtps

Для порта 587:

MAIL_SCHEME=smtp

Смысл тот же: 465 — TLS сразу при подключении, 587 — обычное SMTP-подключение с повышением до TLS.

После изменения .env

php artisan config:clear
php artisan cache:clear

Если на production используется кэш конфигурации, пересобрать его:

php artisan config:cache

Проверка отправки

Быстрая проверка через Tinker:

php artisan tinker
Mail::raw('SMTP is working', function ($message) {
    $message->to('you@example.com')->subject('Laravel SMTP test');
});

Если письмо не ушло, сначала сверяю порт и тип шифрования. Для 465 нужен ssl или smtps, для 587tls или smtp в зависимости от структуры config/mail.php.

Частые причины ошибок

  • неверный пароль или нужен отдельный пароль приложения;
  • MAIL_HOST не совпадает с реальным SMTP-хостом домена;
  • порт 465 указан вместе с tls вместо ssl;
  • после правки .env не сброшен кэш конфигурации;
  • сервер или хостинг блокирует исходящие SMTP-подключения.

Теги

Читать дальше