Настройка 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, для 587 — tls или smtp в зависимости от структуры config/mail.php.
Частые причины ошибок
- неверный пароль или нужен отдельный пароль приложения;
MAIL_HOSTне совпадает с реальным SMTP-хостом домена;- порт
465указан вместе сtlsвместоssl; - после правки
.envне сброшен кэш конфигурации; - сервер или хостинг блокирует исходящие SMTP-подключения.