Є класичний сценарій, у який потрапляє майже кожен, хто запускає свій проєкт: потрібні транзакційні листи (реєстрація, відновлення пароля, нотифікації) і паралельно — нормальні поштові скриньки для команди на своєму домені (support@, sales@, admin@). Mailgun чудово закриває першу задачу: його API стабільно доставляє листи і добре “дружить” з великими поштовими провайдерами. Але от друга задача — “створи ящик і підключися по IMAP” — це вже не про Mailgun.

Потрібен VPS/VDS?
Запусти сервер за хвилину та
отримай підтримку 24/7
Замовити VPS

Правильна схема, яка працює роками: скриньки та прийом пошти — на вашому сервері, а відправка листів із сайту — через Mailgun API. При цьому можна залишити і “ручну” відправку напряму з сервера (наприклад, якщо ти хочеш надсилати листи з admin@ без Mailgun), але тут є нюанс: без правильної аутентифікації домена Gmail відріже такі листи з помилкою на кшталт:

“sender is unauthenticated… SPF did not pass, DKIM did not pass”.

Це саме те, що ти вже бачив: сервер відправив з IP, який не дозволений SPF, а DKIM підпису взагалі не було — Gmail блокує.

Як розділити ролі: хто що робить

  • FastPanel / твій сервер: приймає вхідні листи (MX на сервер), зберігає скриньки (IMAP), відправляє напряму (якщо потрібно).

  • Mailgun: відправляє транзакційні листи через API (і при бажанні через SMTP), зі своїми DKIM-ключами.

Це означає, що в DNS потрібно чесно “сказати світу” дві речі:

  1. Куди доставляти вхідну пошту (MX).

  2. Хто має право відправляти листи від імені домену (SPF + DKIM), причому право буде і у Mailgun, і у твого сервера.


Крок 1. Готуємо сервер (FastPanel)

У FastPanel зазвичай уже встановлено все необхідне. Якщо коротко, для повноцінної пошти потрібні:

  • Postfix (SMTP/MTA),

  • Dovecot (IMAP для скриньок),

  • модуль DKIM (або OpenDKIM),

  • TLS-сертифікат (Let’s Encrypt) для mail.твійдомен.

Практична порада: у клієнтів (Outlook/Thunderbird/телефон) завжди використовуй 587 (Submission) і 993 (IMAPS), а порт 25 залишай для міжсерверної доставки.


Крок 2. DNS: записуємо так, щоб не було конфліктів

Тут головне правило: SPF має бути один, DMARC має бути один. DKIM може бути багато (це нормально), бо DKIM — це про різні селектори.

2.1 A та MX для прийому пошти на сервері

  1. A-запис для поштового хоста:

  • A mail → 95.216.1.58

  1. MX для домену:

  • MX @ → mail.uhost.online. (prio 10)

Якщо у тебе зараз MX на mxa/mxb.mailgun.org — листи на @uhost.online фізично підуть у Mailgun. Для своїх скриньок це потрібно замінити.

2.2 SPF: дозволяємо і Mailgun, і свій сервер

Один TXT на корені домену:

  • TXT @: v=spf1 ip4:95.216.1.58 include:mailgun.org ~all

Саме цей рядок “лікує” твою Gmail-помилку: Gmail бачить, що IP сервера дозволений, і перестає блокувати “unauthenticated”.

2.3 DKIM: два комплекти

Тепер найважливіше: DKIM для Mailgun і DKIM для твого сервера — це різні речі.

DKIM для сервера: ти створюєш, наприклад, селектор s1 і публікуєш ключ:

  • TXT s1._domainkey: v=DKIM1; k=rsa; p=

Після цього у FastPanel потрібно ввімкнути DKIM-підпис для домену (або налаштувати OpenDKIM), щоб вихідні листи справді мали заголовок DKIM-Signature.

DKIM для Mailgun: у кабінеті Mailgun домен показує 1–2 записи DKIM (CNAME/TXT). Додай їх “як є”. Це підпис лише для листів, які шле Mailgun.

2.4 DMARC: один запис, без дублювання

На старті зроби м’яко:

  • TXT _dmarc: v=DMARC1; p=none; adkim=s; aspf=s; pct=100; rua=mailto:dmarc@uhost.online; fo=1

Коли побачиш, що SPF/DKIM стабільно проходять — піднімай політику до quarantine, потім до reject.


Крок 3. PTR (Reverse DNS) — не ігноруй

Це не DNS у зоні, а налаштування у провайдера (наприклад Hetzner). Вистав:

  • PTR 95.216.1.58 → mail.uhost.online

Якщо PTR не виставлений, “пряма” відправка з сервера часто буде програвати по доставці навіть при SPF/DKIM.


Крок 4. Створюємо скриньки у FastPanel

Далі все приємно просто:

  • додаєш поштовий домен uhost.online,

  • створюєш support@, info@, sales@,

  • задаєш пароль,

  • підключаєшся IMAP/SMTP до mail.uhost.online.


Крок 5. Відправка через Mailgun API (для сайту)

Замість mail() або прямого SMTP з сервера, сайт відправляє через Mailgun API — це стабільніше.

Приклад через curl:

 
curl -s --user 'api:' \ https://api.eu.mailgun.net/v3/uhost.online/messages \ -F from='UHost ' \ -F to='gtasity3@gmail.com' \ -F subject='Тест Mailgun API' \ -F text='Якщо ти читаєш це — API працює.'

У проді це легко загорнути у свій сервіс (Laravel/CodeIgniter/чистий PHP) і централізовано логувати помилки доставки.


Крок 6. Перевіряємо, що Gmail не блокує

В Gmail відкрий лист → “Показати оригінал” і шукай:

  • SPF=PASS

  • DKIM=PASS

  • DMARC=PASS (коли політика стабілізується)

Якщо SPF не проходить — перевір, що у домені одна SPF-запис і там є ip4:95.216.1.58. Якщо DKIM не проходить — значить сервер/ Mailgun не підписує (або ти опублікував не той ключ/селектор).


У підсумку ти отримуєш найкраще з двох світів: нормальні “живі” скриньки на сервері плюс надійну транзакційну відправку через Mailgun API. А головне — Gmail перестає різати листи через неаутентифікований домен.

Потрібен виділений сервер?
Потужні конфігурації та
швидкий запуск під ключ
Обрати сервер