How to Set Up SMTP Relay in Laravel
Що таке SMTP-релей і чому варто використовувати його з Laravel SMTP-релей — це стороння служба, яка приймає вихідну пошту від вашого застосунку і переадресовує її в поштові скриньки одержувачів. Вбудована в Laravel відправка через mail() або локально встановлений Postfix на вашому сервері теж техніч
Що таке SMTP-релей і чому варто використовувати його з Laravel
SMTP-релей — це стороння служба, яка приймає вихідну пошту від вашого застосунку і переадресовує її в поштові скриньки одержувачів. Вбудована в Laravel відправка через mail() або локально встановлений Postfix на вашому сервері теж технічно можуть надсилати листи. Але зазвичай такі листи швидко потрапляють у спам. Ця стаття покроково показує, як налаштувати SMTP-релей у Laravel, щоб ваші транзакційні повідомлення справді доходили до вхідних, а не до папки "Спам".
Проблема — у репутації. IP-адреса на спільному хостингу, з якої надсилають листи ще десятки інших застосунків, не має жодної історії для Gmail, Outlook чи Yahoo. Спам-фільтри перед тим, як вирішити, чи потрапить лист у вхідні або в спам, оцінюють репутацію відправника, записи автентифікації та обсяги розсилки. Провайдер релею, як Mailgun, SendGrid чи Postmark, уже має напрацьовану репутацію і сам займається повторними спробами відправки, обробкою відмов (bounce) та прогріванням IP, тож вам не доведеться писати цю логіку самостійно.
Релеї доцільніше використовувати за локальні поштові сервери у будь-якому випадку, коли застосунок надсилає щось транзакційне: скидання паролів, рахунки, підтвердження замовлень, посилання для верифікації реєстрації. Маркетингові розсилки теж від цього виграють, але саме транзакційні листи — та категорія, де пропущена доставка напряму ламає користувацький сценарій — ніхто не буде скидати пароль двічі. Якщо хочете глибше розібратися в темі доставки листів у вхідні, у цьому гайді про найкращі практики доставки листів (email deliverability) детальніше розкрито оцінку репутації.
Що потрібно підготувати перед початком
Перш ніж торкатися будь-яких конфігураційних файлів, зберіть невеликий перелік речей. Пропуск цього кроку — найпоширеніша причина того, що налаштування розтягується на цілий день замість десяти хвилин.
- Робоча інсталяція Laravel (Laravel 8–11 використовують однакову структуру конфігурації пошти).
- Доступ до файлу
.envпроєкту — локально або на розгорнутому сервері. - Акаунт у провайдера SMTP-релею — Mailgun, SendGrid, Postmark, Amazon SES або подібного сервісу.
- Облікові дані релею: хост SMTP, порт, ім'я користувача та пароль (або API-ключ, що використовується як пароль).
- Верифікований домен відправника на стороні провайдера, щоб вихідні листи не відхилялися ще до відправлення.
Більшість провайдерів показують ці облікові дані прямо на дашборді, у розділі під назвою "SMTP" або "Integration". Скопіюйте їх у надійне місце. Вам знадобиться кожне поле.
Налаштування SMTP у Laravel — покрокова інструкція
Laravel розділяє конфігурацію пошти між двома файлами: config/mail.php, який визначає структуру кожного мейлера, і .env, де зберігаються реальні значення. Вам майже ніколи не потрібно редагувати config/mail.php напряму — стандартні налаштування вже читають дані зі змінних середовища. Якщо ви робите це вперше, то розібратися, як налаштувати SMTP-релей у Laravel, насправді означає просто заповнити потрібні змінні середовища в правильному порядку.
- Відкрийте файл
.envі встановітьMAIL_MAILER=smtp. Це вказує Laravel використовувати SMTP-транспорт замістьlog,sendmailчи API-драйвера. - Встановіть
MAIL_HOST— адресу SMTP-сервера релею, наприкладsmtp.mailgun.orgабоsmtp.sendgrid.net. - Встановіть
MAIL_PORT. Поширені значення — 587 для TLS, 465 для SSL, або 2525 як резервний варіант, коли 587 заблоковано. - Встановіть
MAIL_USERNAMEіMAIL_PASSWORDвідповідно до облікових даних, виданих вашим провайдером. У деяких провайдерів "ім'ям користувача" буквально є словоapikey, а паролем — ваш реальний API-ключ. - Встановіть
MAIL_ENCRYPTIONу значенняtlsу більшості випадків. Залишайте порожнім лише якщо провайдер прямо вказує на порт 25 без шифрування. - Встановіть
MAIL_FROM_ADDRESSтаMAIL_FROM_NAME. Вони визначають стандартний заголовок "From", і мають відповідати домену, верифікованому в релеї. - Після збереження виконайте
php artisan config:clear. Laravel агресивно кешує конфігурацію, і застарілі значення — головна причина того, чому свіже налаштування "не працює" з першого разу.
Ось як виглядає типовий блок після заповнення:
| Змінна | Приклад значення | Призначення |
|---|---|---|
| MAIL_MAILER | smtp | Вибирає драйвер транспорту |
| MAIL_HOST | smtp.mailgun.org | Адреса сервера релею |
| MAIL_PORT | 587 | Порт підключення |
| MAIL_ENCRYPTION | tls | Шифрує SMTP-сесію |
| MAIL_USERNAME | postmaster@yourdomain.com | Ідентифікатор облікового запису релею |
| MAIL_PASSWORD | your-api-key | Секрет автентифікації релею |
Нічого складного. Здебільшого це просте копіювання значень, а помилки зазвичай виникають через неправильне поєднання порту та шифрування, а не через друкарські помилки.
Перевірка з'єднання SMTP-релею в Laravel
Ніколи не довіряйте зміні конфігурації, поки реальний лист не дійде до адресата. Перевіряйте.
- Відкрийте сесію Tinker командою
php artisan tinker. - Виконайте
Mail::raw('Test message from Laravel SMTP relay', function ($message) { $message->to('you@example.com')->subject('SMTP test'); });. - Перевірте вхідні — і папку "Спам" на всяк випадок — протягом хвилини-двох.
- Якщо нічого не прийшло, перевірте
storage/logs/laravel.logна наявність реальної помилки SMTP, повернутої провайдером. - Порівняйте результат із дашбордом провайдера, який зазвичай логує кожну спробу відправлення зі статусом доставки.
Постійно трапляються дві помилки. Тайм-аут з'єднання зазвичай означає, що порт заблоковано вашим хостинг-провайдером або фаєрволом, що прикро часто трапляється на дешевих VPS-планах, де за замовчуванням блокується вихідний порт 25. Помилка автентифікації майже завжди означає, що ім'я користувача та пароль переплутані місцями, або що API-ключ вставлено з пробілом на кінці. Якщо потрібен більш системний спосіб перевірки доставності, ніж одна тестова відправка, є спеціалізовані інструменти перевірки доставності листів, які за один прохід перевіряють спам-оцінку, автентифікацію та вміст листа.
API для транзакційних листів у Laravel — альтернатива SMTP
SMTP — не єдиний варіант. Кожен великий провайдер релею також надає REST API, і для більшості з них у Laravel є офіційні або від спільноти пакети-драйвери — так працюють Mailgun, SendGrid, Postmark і SES.
API-варіант повністю пропускає SMTP-хендшейк. Замість відкриття сокет-з'єднання, автентифікації та передачі повідомлення рядок за рядком, ваш застосунок робить один HTTPS POST-запит із вмістом листа у форматі JSON. Це важливо, бо чимало хостингових середовищ блокують або обмежують SMTP-порти, тоді як порт 443 майже ніколи не блокують. Відправлення через API також, як правило, швидше для транзакційних застосунків із високим навантаженням, оскільки немає потреби узгоджувати постійне з'єднання для кожного повідомлення.
Налаштування трохи відрізняється залежно від провайдера, але схема залишається однаковою:
- Встановіть пакет провайдера для Laravel через Composer, наприклад
composer require symfony/mailgun-mailer symfony/http-clientдля Mailgun. - Встановіть
MAIL_MAILER=mailgun(або відповідну назву драйвера) у.env. - Додайте API-ключ і домен як змінні середовища, відповідно до конкретних ключів, які очікує драйвер.
- Очистіть кеш конфігурації та надішліть тестове повідомлення так само, як і у випадку з SMTP.
SMTP усе ще має своє місце — він універсальний і працює однаково незалежно від провайдера, що зручно, якщо колись доведеться змінити релей. Команди, що працюють поза Laravel, стикаються з тією ж проблемою блокування портів; логіка з цього SMTP relay для Node.js так само застосовна концептуально, навіть якщо код відрізняється.
Захист облікових даних SMTP
Ставтеся до паролів SMTP та API-ключів так само, як до облікових даних production-бази даних. Тому що фактично це вони і є.
- Ніколи не додавайте
.envу систему контролю версій. Переконайтеся, що він указаний у.gitignore— у Laravel це так за замовчуванням, але перевіряйте після кожного оновлення фреймворку. - Використовуйте окремі облікові дані для staging і production. Витік ключа зі staging-середовища не повинен давати змогу надсилати листи з вашого production-домену.
- Періодично оновлюйте API-ключі, особливо після того, як хтось із команди пішов або втратив ноутбук. Більшість провайдерів дозволяють згенерувати новий ключ
без повного перестворення інтеграції, тож цей процес варто зробити звичною частиною обслуговування.
Перевірка та підтримка
Після налаштування не обмежуйтеся одним тестовим листом. Перевірте типові сценарії: реєстрацію, скидання пароля, системні сповіщення та будь-які черги, які можуть відправляти пошту у фоновому режимі.
- Надішліть тестовий лист із локального середовища та зі staging.
- Переконайтеся, що відправник, тема і тіло листа виглядають коректно в різних поштових клієнтах.
- Перевірте, чи немає помилок у логах Laravel і відповіді від SMTP-сервера.
- Стежте за лімітами відправки, щоб уникнути блокування акаунта.
Якщо листи не доходять, найчастіше проблема в неправильних даних доступу, невірному порту, відсутності TLS або обмеженнях самого провайдера. Також варто перевірити SPF, DKIM і DMARC, якщо повідомлення потрапляють у спам або відхиляються поштовими серверами.
У більшості випадків SMTP relay у Laravel налаштовується швидко, а подальша стабільність залежить від дисципліни в конфігурації та безпеці доступів. Коли все зроблено правильно, пошта працює передбачувано і без зайвих сюрпризів.
На цій сторінці
← Усі статтіОдин клік. З нього ми розуміємо, про що писати далі.
Оцінок ще немає — ваша буде першою.
Коментарі
Коментарі читаємо перед публікацією.