Если ты запускаешь сервис на своём домене, почти сразу появляется две потребности. Первая — чтобы письма от сайта доходили стабильно: подтверждение регистрации, сброс пароля, уведомления. Вторая — чтобы были “нормальные” ящики для команды: support@, sales@, admin@ с IMAP/SMTP, как в любой корпоративной почте. И вот здесь многие путают роли: Mailgun отлично решает отправку через API, но не предназначен для классических почтовых ящиков “создал и читаешь по IMAP”.
Оптимальная схема простая: приём почты и ящики — на своём сервере (FastPanel), а транзакционную отправку — через Mailgun API. При этом ты можешь дополнительно оставить возможность отправлять письма напрямую с сервера, но Gmail будет требовать аутентификацию. Если её нет — получишь ошибку вроде:
550-5.7.26 sender is unauthenticated… DKIM did not pass, SPF did not pass
Это происходит, когда письмо уходит с IP сервера, а SPF разрешает только Mailgun (или вообще не разрешает этот IP), а DKIM подписи у письма нет.
Шаг 1. Что должно быть на сервере (FastPanel)
FastPanel обычно уже содержит почтовый стек, но важно, чтобы было включено/настроено:
-
Postfix (SMTP/MTA) — отправка и приём
-
Dovecot (IMAP) — доступ к ящикам
-
DKIM-подпись (через OpenDKIM или модуль панели)
-
TLS-сертификат (Let’s Encrypt) на
mail.<домен>
Практический момент: для клиентов используй 587 (Submission) и 993 (IMAPS). Порт 25 оставляй для межсерверной доставки.
Шаг 2. DNS: как сделать, чтобы не было конфликтов
Золотое правило:
-
SPF в домене должен быть один (одна TXT-запись на
@) -
DMARC должен быть один (одна TXT-запись на
_dmarc) -
DKIM может быть несколько (это нормально)
2.1 A и MX — чтобы почта приходила на твой сервер
-
A-запись:
-
A mail → 95.216.1.58
-
MX-запись:
-
MX @ → mail.uhost.online. (prio 10)
Если у тебя стоят MX на mxa/mxb.mailgun.org, входящая почта будет идти в Mailgun. Для ящиков на сервере MX должен указывать на mail.domain.
2.2 SPF — разрешаем и сервер, и Mailgun
Одна TXT-запись на корне домена:
-
TXT @: v=spf1 ip4:95.216.1.58 include:mailgun.org ~all
Вот почему это важно: когда письмо отправляется напрямую с твоего сервера, Gmail проверяет SPF и видит — “IP разрешён”, значит отправитель аутентифицирован.
2.3 DKIM — два комплекта (сервер и Mailgun)
DKIM — это не “просто запись в DNS”. Это механизм: письмо должно быть подписано приватным ключом на стороне отправителя. Поэтому:
DKIM для сервера: создаёшь селектор s1:
-
TXT s1._domainkey: v=DKIM1; k=rsa; p=
И включаешь DKIM в FastPanel/OpenDKIM так, чтобы исходящие письма реально подписывались (в заголовках появится DKIM-Signature).
DKIM для Mailgun: в панели Mailgun домен выдаёт свои DKIM-записи (часто 2 шт.). Их добавляешь как есть — это подпись для писем, которые отправляет Mailgun.
2.4 DMARC — один, и лучше начать мягко
На старте:
-
TXT _dmarc: v=DMARC1; p=none; adkim=s; aspf=s; pct=100; rua=mailto:dmarc@uhost.online; fo=1
Когда всё стабильно проходит — меняешь на quarantine, потом reject.
Шаг 3. PTR (Reverse DNS) — иначе “прямая” отправка будет страдать
На стороне провайдера выставь:
-
PTR 95.216.1.58 → mail.uhost.online
Это сильно влияет на доставляемость при отправке напрямую с сервера.
Шаг 4. Создаём ящики в FastPanel
Дальше всё просто: добавляешь почтовый домен uhost.online, создаёшь support@, sales@ и подключаешься по IMAP/SMTP к mail.uhost.online.
Шаг 5. Отправляем с сайта через Mailgun API
Транзакционные письма лучше отправлять не через mail() и не напрямую через порт 25, а через Mailgun API. Пример:
Шаг 6. Проверяем через Gmail “Показать оригинал”
Ищи:
-
SPF=PASS -
DKIM=PASS -
DMARC=PASS(когда всё настроено)
Если что-то не проходит — почти всегда причина в дублях SPF/DMARC, неверном MX или том, что DKIM на сервере “в DNS есть, а фактически письма не подписываются”.
Итог: ящики живут на сервере (FastPanel), сайт отправляет транзакционные письма через Mailgun API, а Gmail больше не блокирует тебя по “unauthenticated sender”.