Если ты думал, что отправка писем в Laravel — это просто Mail::send() и всё работает, можешь готовиться к разочарованию. Почта — это не магия, это цепочка настроек и ловушек: SMTP может не пускать, очереди могут падать, а тесты легко превратятся в спам. Laravel Mail даёт интерфейс, но решать проблемы всё равно придётся руками.
Установка Laravel Mail
Слушай, тут вообще ничего устанавливать не надо. Он уже встроен. Да, иногда хочется поставить ещё пакет «для удобства», но чаще это просто лишняя сложность.
Настройка конфигурации
Открываешь config/mail.php и начинаешь править. Например, для SMTP:
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailtrap.io'),
'port' => env('MAIL_PORT', 2525),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
И не забудь .env:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525 MAIL_USERNAME=твой_логин
MAIL_PASSWORD=твой_пароль
Если хотя бы одна переменная неверна — письма просто не уйдут, и Laravel будет молча их проглатывать. Проверка SMTP на тестовом сервере спасёт кучу нервов.
Создание Mailable классов
Mailable классы — это как шаблон для писем. Чтобы создать, делаем:
php artisan make:mail WelcomeMail
Внутри класса настраиваем тему, шаблон и данные:
public function build()
{
return $this->view('emails.welcome');
}
Если забьёшь на шаблоны — письмо уйдёт пустое. Всё просто, но дьявол в деталях.
Отправка писем
Для реальной отправки:
use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;
Mail::send(new WelcomeMail($user));
Для очередей, чтобы не тормозить приложение:
Mail::queue(new WelcomeMail($user));
И тут начинается веселье: если очередь не настроена, письма не уйдут, и ты будешь удивляться, почему всё молчит.
Тестирование почты
Не хочешь спамить тестовой базой? Используй Mail::fake():
use Illuminate\Support\Facades\Mail;
Mail::fake();
// действия, которые должны отправить письмо
Mail::assertSent(WelcomeMail::class);
Просто и удобно, но учти: fake не проверяет, уйдёт ли письмо реально — только что Laravel попробовал его отправить.
На практике
На реальных проектах чаще всего возникают такие приколы:
- SMTP блокирует тестовые письма.
- Очереди падают из-за неправильной сериализации объекта
Mailable. - Иногда письма уходят, но в спам.
Если хочешь, чтобы всё реально работало — придётся проверять каждую деталь. Laravel Mail не волшебная палочка, а инструмент, который спасёт тебя только при грамотной настройке.
Заключение
Laravel Mail упрощает отправку писем, но без понимания, как работает SMTP, очереди и тесты, ты быстро получишь баги и странные молчания сервера. Настраивай, тестируй и не верь, что send() сам всё разрулит.
0 комментариев