Обновлено 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 уже читает все эти переменные.

Серверsmtp.bulko.io
Порт587 · 465 · 2525
ШифрованиеSTARTTLS · SSL
Логин и парольиз кабинета

Что указать в Laravel

ПолеЗначение
MAIL_MAILERsmtp
MAIL_HOSTsmtp.bulko.io
MAIL_PORT587 (или 465, или 2525, если хостинг блокирует остальные)
MAIL_SCHEMEnull для 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}" или название вашего проекта

Настройка по шагам

  1. Купите SMTP-пакет на странице Bulko SMTP Relay и скопируйте логин и пароль в разделе Dashboard -> SMTP Access (их также присылают на почту сразу после оплаты).
  2. Откройте файл .env в корне проекта и задайте MAIL_MAILER=smtp, MAIL_HOST=smtp.bulko.io и MAIL_PORT=587.
  3. Заполните MAIL_USERNAME и MAIL_PASSWORD. Если в пароле есть #, пробелы или $, возьмите его в одинарные кавычки: без кавычек значение обрезается на #, а в двойных кавычках подставляются переменные ${...}.
  4. Для портов 587 и 2525 оставьте MAIL_SCHEME=null. Symfony Mailer, на котором построена почта в Laravel, подключится по обычному SMTP и сам переключится на TLS через STARTTLS. Только для порта 465 укажите MAIL_SCHEME=smtps (при пустой схеме и порте 465 Laravel выберет smtps сам).
  5. В MAIL_FROM_ADDRESS укажите адрес на своём домене. Чтобы SPF, DKIM и DMARC были выровнены, подтвердите домен в разделе Sending Domains личного кабинета Bulko (DKIM с селектором bk1 и CNAME bnc.yourdomain.com).
  6. Загляните в config/mail.php: в Laravel 11, 12 и 13 мейлер smtp по умолчанию уже читает MAIL_SCHEME, MAIL_HOST, MAIL_PORT, MAIL_USERNAME и MAIL_PASSWORD, так что обычно править ничего не нужно.
  7. Выполните 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 supportedMAIL_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 писем в сутки на один доступ.

SMTP Relay 5K: $5 · 5000SMTP Relay 20K: $15 · 20000SMTP Relay 50K: $30 · 50000SMTP Relay 150K: $60 · 150000
Тарифы SMTP-релея

Что можно отправлять: правила использования.