Email не отправляется
Пошаговое устранение проблем с доставкой email.
Шаг 1: Проверьте основное
# Проверить настройки SMTP в .env
grep MAIL_ .env
Убедитесь, что:
MAIL_MAILER=smtp(неlogилиnull)MAIL_HOSTуказан верноMAIL_PORTуказан верно (587 для TLS, 465 для SSL)MAIL_USERNAMEиMAIL_PASSWORDзаполненыMAIL_ENCRYPTION=tls(илиssl)
Шаг 2: Проверьте через панель администратора
- Перейдите в Admin > Settings > Email
- Нажмите Send Test Email
- Проверьте сообщение об ошибке, если отправка не удалась
Шаг 3: Проверьте через командную строку
php artisan tinker
Mail::raw('Test', function ($m) {
$m->to('[email protected]')->subject('Test');
});
Проверьте storage/logs/laravel.log на наличие ошибок.
Распространённые проблемы
| Проблема | Решение |
|---|---|
| «Connection timed out» | Порт 587/465 заблокирован хостингом. Попробуйте порт 2525 или обратитесь к хостинг-провайдеру. |
| «Authentication failed» | Неверное имя пользователя/пароль. Для Gmail используйте Пароль приложения. |
| «Certificate verify failed» | Старый PHP. Попробуйте добавить 'verify_peer' => false в параметры почтовика в config/mail.php. |
| Письма попадают в спам | Добавьте DNS-записи SPF, DKIM и DMARC. |
| Задержка писем | Используете QUEUE_CONNECTION=database? Убедитесь, что воркер очереди запущен. |
| Нет ошибки, но письма не приходят | Используете MAIL_MAILER=log? Письма записываются в лог, а не отправляются. Проверьте storage/logs/laravel.log. |
Использование MAIL_MAILER=log для отладки
Установите MAIL_MAILER=log в .env, чтобы все письма записывались в файл лога вместо отправки. Полезно для проверки содержимого писем без влияния на реальных получателей.