Є класичний сценарій, у який потрапляє майже кожен, хто запускає свій проєкт: потрібні транзакційні листи (реєстрація, відновлення пароля, нотифікації) і паралельно — нормальні поштові скриньки для команди на своєму домені (support@, sales@, admin@). Mailgun чудово закриває першу задачу: його API стабільно доставляє листи і добре “дружить” з великими поштовими провайдерами. Але от друга задача — “створи ящик і підключися по IMAP” — це вже не про Mailgun.
Правильна схема, яка працює роками: скриньки та прийом пошти — на вашому сервері, а відправка листів із сайту — через 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 потрібно чесно “сказати світу” дві речі:
-
Куди доставляти вхідну пошту (MX).
-
Хто має право відправляти листи від імені домену (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 для прийому пошти на сервері
-
A-запис для поштового хоста:
-
A mail → 95.216.1.58
-
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:
У проді це легко загорнути у свій сервіс (Laravel/CodeIgniter/чистий PHP) і централізовано логувати помилки доставки.
Крок 6. Перевіряємо, що Gmail не блокує
В Gmail відкрий лист → “Показати оригінал” і шукай:
-
SPF=PASS -
DKIM=PASS -
DMARC=PASS(коли політика стабілізується)
Якщо SPF не проходить — перевір, що у домені одна SPF-запис і там є ip4:95.216.1.58. Якщо DKIM не проходить — значить сервер/ Mailgun не підписує (або ти опублікував не той ключ/селектор).
У підсумку ти отримуєш найкраще з двох світів: нормальні “живі” скриньки на сервері плюс надійну транзакційну відправку через Mailgun API. А головне — Gmail перестає різати листи через неаутентифікований домен.