Обновлено 2026-10-08
Как настроить SMTP в Laravel
Чтобы Laravel отправлял письма через SMTP-релей, пропишите в .env MAIL_MAILER=smtp, MAIL_HOST=smtp.bulko.io, MAIL_PORT=587, а также MAIL_USERNAME и MAIL_PASSWORD; MAIL_SCHEME оставьте пустым, тогда соединение пойдёт через STARTTLS. Для порта 465 укажите MAIL_SCHEME=smtps. Стандартный config/mail.php уже читает все эти переменные.
Что указать в Laravel
| Поле | Значение |
|---|---|
| MAIL_MAILER | smtp |
| MAIL_HOST | smtp.bulko.io |
| MAIL_PORT | 587 (или 465, или 2525, если хостинг блокирует остальные) |
| MAIL_SCHEME | null для 587/2525 (STARTTLS), smtps для 465 |
| MAIL_USERNAME | Ваш SMTP-логин вида smtp_xxxxxxxxxxxxxxxx (Dashboard -> SMTP Access) |
| MAIL_PASSWORD | Ваш SMTP-пароль (в одинарных кавычках, если в нём есть #, $ или пробелы) |
| MAIL_FROM_ADDRESS | Адрес на вашем домене, например [email protected] |
| MAIL_FROM_NAME | "${APP_NAME}" или название вашего проекта |
Настройка по шагам
- Купите SMTP-пакет на странице Bulko SMTP Relay и скопируйте логин и пароль в разделе Dashboard -> SMTP Access (их также присылают на почту сразу после оплаты).
- Откройте файл
.envв корне проекта и задайтеMAIL_MAILER=smtp,MAIL_HOST=smtp.bulko.ioиMAIL_PORT=587. - Заполните
MAIL_USERNAMEиMAIL_PASSWORD. Если в пароле есть#, пробелы или$, возьмите его в одинарные кавычки: без кавычек значение обрезается на#, а в двойных кавычках подставляются переменные${...}. - Для портов 587 и 2525 оставьте
MAIL_SCHEME=null. Symfony Mailer, на котором построена почта в Laravel, подключится по обычному SMTP и сам переключится на TLS через STARTTLS. Только для порта 465 укажитеMAIL_SCHEME=smtps(при пустой схеме и порте 465 Laravel выберет smtps сам). - В
MAIL_FROM_ADDRESSукажите адрес на своём домене. Чтобы SPF, DKIM и DMARC были выровнены, подтвердите домен в разделе Sending Domains личного кабинета Bulko (DKIM с селекторомbk1и CNAMEbnc.yourdomain.com). - Загляните в
config/mail.php: в Laravel 11, 12 и 13 мейлерsmtpпо умолчанию уже читаетMAIL_SCHEME,MAIL_HOST,MAIL_PORT,MAIL_USERNAMEиMAIL_PASSWORD, так что обычно править ничего не нужно. - Выполните
php artisan config:clear, чтобы закешированный конфиг не перекрывал новые значения, и перезапустите воркеры очередей (php artisan queue:restart), если письма уходят из очереди.
MAIL_SCHEME или MAIL_ENCRYPTION
В проектах, созданных до обновления скелета Laravel 11, часто остаются MAIL_ENCRYPTION=tls и ключ encryption в config/mail.php. Актуальные версии Laravel собирают транспорт только по scheme и port, поэтому MAIL_ENCRYPTION там ни на что не влияет. Допустимые значения MAIL_SCHEME: только smtp и smtps. Значения вроде tls или ssl приводят к ошибке о неподдерживаемой схеме. Чем отличаются порты 587, 465 и 2525, описано в статье о SMTP-портах.
.env и config/mail.php
# .env (Laravel 11, 12 and 13)
MAIL_MAILER=smtp
MAIL_SCHEME=null
MAIL_HOST=smtp.bulko.io
MAIL_PORT=587
MAIL_USERNAME=smtp_xxxxxxxxxxxxxxxx
MAIL_PASSWORD='your-smtp-password'
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"
# Порт 465 (неявный TLS) вместо 587:
# MAIL_PORT=465
# MAIL_SCHEME=smtps
# Хостинг блокирует 587 и 465? Используйте 2525 (STARTTLS):
# MAIL_PORT=2525
# config/mail.php (стандартный файл, менять не нужно):
# 'smtp' => [
# 'transport' => 'smtp',
# 'scheme' => env('MAIL_SCHEME'),
# 'url' => env('MAIL_URL'),
# 'host' => env('MAIL_HOST', '127.0.0.1'),
# 'port' => env('MAIL_PORT', 2525),
# 'username' => env('MAIL_USERNAME'),
# 'password' => env('MAIL_PASSWORD'),
# 'timeout' => null,
# 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
# ],
# Проверка из терминала:
# php artisan config:clear
# php artisan tinker
# > Mail::raw('Bulko SMTP test from Laravel', fn ($m) => $m->to('[email protected]')->subject('Laravel SMTP test'));
Проверка
Запустите php artisan tinker и выполните Mail::raw('Bulko SMTP test from Laravel', fn ($m) => $m->to('[email protected]')->subject('Laravel SMTP test'));, подставив ящик, который можете проверить. Если tinker вернул объект SentMessage без исключения, релей принял письмо, и оно должно прийти в течение минуты-двух.
Если Laravel выбросил TransportException, в тексте ошибки будет код ответа SMTP (например, 535 или 554 5.7.1). По нему найдите нужную строку в таблице ниже. Если письмо отправляется из контроллера или задачи в очереди, смотрите также storage/logs/laravel.log.
Ошибки и решения
| Проблема | Решение |
|---|---|
| Expected response code "235" but got code "535" | Неверный логин или пароль. Скопируйте их заново из Dashboard -> SMTP Access, возьмите пароль в одинарные кавычки и выполните php artisan config:clear. Подробнее: https://bulko.io/ru/smtp-errors/535/ |
| The "tls" scheme is not supported | MAIL_SCHEME принимает только smtp или smtps. Для порта 587 укажите MAIL_SCHEME=null (или smtp), для 465 укажите smtps. |
| Connection timed out или "Connection could not be established" | Сервер или хостинг блокирует исходящие 587 и 465. Переключитесь на MAIL_PORT=2525 с MAIL_SCHEME=null. |
| SSL routines: wrong version number | Схема не совпадает с портом: smtps на 587 или обычный smtp на 465. Используйте 587 с пустой схемой или 465 со smtps. |
| Письма по-прежнему пишутся в лог или уходят через старый сервер | Конфиг закеширован или MAIL_MAILER всё ещё log. Задайте MAIL_MAILER=smtp, выполните php artisan config:clear и перезапустите воркеры очередей. |
| 554 5.7.1 rejected | Письмо отклонил ИИ-фильтр контента (фишинг, вредоносные ссылки, имитация бренда, мошенничество). Проверьте текст и ссылки, правила: https://bulko.io/ru/acceptable-use/ |
Частые вопросы
Какой порт выбрать в Laravel: 587 или 465?
Берите 587 с пустым MAIL_SCHEME, это STARTTLS. Порт 465 используйте только вместе с MAIL_SCHEME=smtps. Порт 2525 работает как 587 и выручает, когда хостинг закрывает стандартные порты.
Нужен ли MAIL_ENCRYPTION в Laravel 11 и 12?
Нет. Актуальный config/mail.php использует MAIL_SCHEME, а фреймворк при создании SMTP-транспорта MAIL_ENCRYPTION не читает. Эту строку можно удалить из .env.
Можно ли через этот релей получать входящую почту?
Нет. Bulko SMTP работает только на отправку, IMAP и почтового ящика нет. Ответы приходят на адрес From или Reply-To, который вы указали в Laravel.
Сколько писем в день может отправить приложение?
По умолчанию лимит 2 000 писем в сутки на один SMTP-аккаунт. Чтобы его поднять, напишите на [email protected].
Сколько это стоит?
Пакеты оплачиваются один раз: $5 за 5 000 писем, $15 за 20 000, $30 за 50 000 или $60 за 150 000. Неиспользованные письма не сгорают, бесплатного пробного периода для SMTP нет.
Работают ли очереди и уведомления?
Да. Mailable в очереди и почтовые уведомления используют тот же мейлер smtp, поэтому после настройки .env они тоже идут через релей. Не забудьте перезапустить воркеры.
Получить SMTP-доступ для Laravel
Разовая оплата картой или криптой, без подписки. Неиспользованные письма не сгорают. Лимит 2 000 писем в сутки на один доступ.
Что можно отправлять: правила использования.