Новинка Виртуальный VDS сервер в Нидерландах от 390р
Выберите продукт

SMTPUTF8/EAI: включаем поддержку Unicode‑адресов в Postfix и Dovecot

SMTPUTF8/EAI включает Unicode в адресах (локальная часть и домен). Показываю, как безопасно активировать поддержку в связке Postfix + Dovecot: требования версий, настройка LMTP/IMAP, тесты входящих/исходящих, совместимость с фильтрами и откат.
SMTPUTF8/EAI: включаем поддержку Unicode‑адресов в Postfix и Dovecot

Unicode‑адреса в email — это не «будущее когда‑нибудь», а вполне рабочая технология из набора стандартов EAI (Email Address Internationalization) и расширения SMTPUTF8. Практически это означает возможность получать и отправлять письма на адреса вроде тест@пример.рф, где и локальная часть, и домен могут быть в Unicode. В этой инструкции разберём, как включить поддержку SMTPUTF8 в Postfix и довести доставку до ящиков Dovecot, не разрушив совместимость и доставляемость.

Коротко: что такое EAI и SMTPUTF8

EAI — набор RFC, позволяющий использовать UTF‑8 в email‑адресах: в локальной части и доменном имени. SMTPUTF8 — соответствующее расширение протокола SMTP/LMTP, при котором участники цепочки явно договариваются, что в конверте и заголовках могут быть не‑ASCII символы.

Важно различать EAI и IDN:

  • IDN (Internationalized Domain Names) — домены в Unicode. Для DNS они преобразуются в Punycode (A‑label), например пример.рф → xn--e1afmkfd.xn--p1ai.
  • EAI/SMTPUTF8 — дополнительно разрешает UTF‑8 в локальной части адреса, то есть в части до «@». Для таких адресов ASCII‑эквивалента может не существовать вовсе.

Даже если DNS уже работает с IDN, без SMTPUTF8 письмо на юникодный локал‑парт будет некорректным — сервер обязан отклонить или попытаться понизить формат, а понижение стандартизовано не для всех случаев.

Если вы планируете адреса на родном языке, заранее позаботьтесь о домене: регистрируйте IDN через регистрацию доменов, чтобы иметь читабельный адрес и корректную Punycode‑зону в DNS.

FastFox VDS
Регистрация доменов от 99 руб.
Каждый проект заслуживает идеального доменного имени, выберите один из сотни, чтобы начать работу!

Предпосылки и версии ПО

Что проверить перед включением:

  • Postfix 3.0+ (рекомендуется 3.6/3.7+). Поддержка SMTPUTF8 есть давно; корректная работа с IDNA2008 зависит от системной библиотеки idn2.
  • Dovecot 2.2+ (лучше 2.3+). LMTP‑сервер Dovecot умеет SMTPUTF8, IMAP — расширение UTF8=ACCEPT для имён папок и интернационализации.
  • Фильтры/milter/антивирусы не должны ломать UTF‑8 в заголовках и конверте.
  • Системная локаль и конфиги — в UTF‑8. Не смешивайте кодировки в картах Postfix и базах пользователей.

План безопасного включения

  1. Соберите инвентарь: версии Postfix/Dovecot, как устроена доставка (local vs LMTP), какие фильтры используются, какие клиенты подключаются.
  2. Подготовьте бэкапы main.cf/master.cf (Postfix) и dovecot.conf (или conf.d).
  3. Включите SMTPUTF8 на стенде/тестовом домене, прогоните тесты, проверьте логи.
  4. Переключите прод по расписанию с возможностью быстрого отката.

Проверка EHLO в терминале: объявление 250-SMTPUTF8 и фрагмент main.cf

Включаем SMTPUTF8 в Postfix

Проверьте, собрана ли поддержка и текущее значение:

postconf -n | grep -i smtputf8
postconf -d | grep -i smtputf8

Если параметр не задан явно, добавьте в main.cf:

# /etc/postfix/main.cf
smtputf8_enable = yes
# Рекомендуется зафиксировать уровень современных дефолтов
compatibility_level = 2

Перезагрузите Postfix и проверьте, что SMTP‑сервер объявляет поддержку:

postfix reload
# Проверка EHLO
openssl s_client -starttls smtp -crlf -connect 127.0.0.1:587
EHLO localhost
QUIT

В ответе на EHLO ожидайте строку:

250-SMTPUTF8

Это значит, что ваш Postfix как сервер готов принимать письма с UTF‑8 в адресах и заголовках. Как клиент он также использует SMTPUTF8 при исходящих соединениях, если удалённая сторона объявит расширение. Не забудьте про STARTTLS и валидный сертификат — при необходимости оформите или продлите SSL-сертификаты.

Доставка на LMTP (Dovecot)

Если доставка из Postfix в ящики идёт через Dovecot LMTP, Postfix автоматически будет использовать «SMTPUTF8» и в LMTP‑диалоге. Обычно дополнительных настроек в Postfix не требуется — достаточно рабочего LMTP‑транспорта.

# /etc/postfix/main.cf (фрагмент связки с Dovecot LMTP)
virtual_transport = lmtp:unix:private/dovecot-lmtp

Убедитесь, что сокет LMTP существует по указанному пути и обслуживается Dovecot.

Готовим Dovecot к EAI

В Dovecot включаем LMTP и проверяем IMAP‑возможности. Базовый скелет может выглядеть так:

# /etc/dovecot/dovecot.conf (или conf.d)
protocols = imap pop3 lmtp

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

# Имена папок в IMAP хранятся в UTF-8 по умолчанию в современных Dovecot
namespace inbox {
  inbox = yes
}

После перезапуска Dovecot проверьте, что LMTP приветствие содержит поддержку SMTPUTF8 (Dovecot объявляет её автоматически):

systemctl reload dovecot
# Быстрый тест LMTP-диалога через UNIX-сокет
socat - UNIX-CONNECT:/var/spool/postfix/private/dovecot-lmtp
LHLO test
QUIT

В IMAP‑сеансе полезно увидеть в CAPABILITY флаг UTF8=ACCEPT — большинство современных Dovecot его объявляет по умолчанию:

# Примерно так должно быть видно
* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR UIDPLUS ID ENABLE AUTH=PLAIN STARTTLS UTF8=ACCEPT
FastFox VDS
Облачный VDS-сервер
Виртуальные серверы с быстрым запуском и гибкой конфигурацией от 390₽ / мес
Доступные локации
Россия Нидерланды

Пользователи и аутентификация

Технически Dovecot может хранить имена ящиков и папок в UTF‑8, но безопаснее разделять две сущности:

  • Аутентификационное имя пользователя (login) — оставить в ASCII (например, user1 или alias@example.com), чтобы не ломать автоконфиги клиентов.
  • Почтовые адреса для приёма — могут быть в Unicode, а на уровне Postfix вы сопоставляете их с логином через карты виртуальных алиасов.

Для сопоставления используйте обычные карты Postfix; файл храните в UTF‑8:

# /etc/postfix/virtual (пример)
тест@пример.рф user1

# Активация карт
postmap /etc/postfix/virtual
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"
postfix reload

Тесты: входящие, исходящие, LMTP

Проверка объявления EHLO

openssl s_client -starttls smtp -crlf -connect 127.0.0.1:25
EHLO localhost
QUIT

Ожидаем в ответе строку 250-SMTPUTF8.

Тест входящей доставки на Unicode‑адрес

Удобно использовать swaks, он умеет выставлять флаг SMTPUTF8:

swaks --to "тест@пример.рф" --from "sender@example.com" --smtputf8 --server 127.0.0.1 --port 25

В логах Postfix вы увидите, что конверт прошёл и письмо ушло в LMTP доставку к Dovecot. Если какой‑то фильтр не поддерживает расширение, появится «SMTPUTF8 is required but not offered» — разбирайте цепочку по журналам.

Тест исходящей отправки

Проверьте, что Postfix как клиент запрашивает SMTPUTF8 при отправке на внешние MTA, которые его объявляют, и корректно обрабатывает отсутствие поддержки у адресата:

# Включите умеренный лог TLS на время проверки
postconf -e "smtp_tls_loglevel = 1"
postfix reload
# Отправьте письмо на внешний Unicode-адрес и мониторьте /var/log/mail.log

Тесты LMTP и SMTPUTF8 через socat и swaks на серверной консоли

Совместимость: что будет, если адресат без SMTPUTF8

Реальность: часть внешних MTA по‑прежнему не поддерживает SMTPUTF8.

  • Доменная часть. IDN автоматически трансформируется в Punycode для DNS‑запросов.
  • Локальная часть. Стандартизованного преобразования локальной части в ASCII не существует. Если у адресата «юникодный» локал‑парт, а его сервер не поддерживает SMTPUTF8, доставка должна быть отклонена.
  • Алиасы‑двойники. Практично держать пару адресов: Unicode‑вариант и ASCII‑алиас в тот же ящик.
  • Маршрутизация через совместимый смарт‑хост. Для отдельных направлений отправляйте через релей, который гарантированно понимает SMTPUTF8.

В Postfix для отдельных отправителей можно настроить особую маршрутизацию:

# /etc/postfix/main.cf
sender_dependent_relayhost_maps = hash:/etc/postfix/relay_by_sender
smtp_sender_dependent_authentication = yes

# /etc/postfix/relay_by_sender
sender@example.com [smtp.relay.local]:587

postmap /etc/postfix/relay_by_sender
postfix reload

Для повышения доставляемости также проверьте SPF/PTR и базовую репутацию: пригодится руководство по настройке SPF и PTR в Postfix.

Фильтры, антиспам и заголовки

Если у вас на пути стоят milter/контент‑фильтры (антиспам, антивирус), проверьте:

  • Они не ломают заголовки с UTF‑8 и корректно добавляют свои поля.
  • Они не отклоняют письма лишь из‑за Unicode в адресах.

Полезно временно включить копирование входящих/исходящих в диагностический журнал с видимыми конвертом и заголовками. Для серверных правил удобно использовать Sieve — см. серверные фильтры Sieve в Dovecot.

Хранение, кодировки и бэкапы

  • Пути к ящикам и имена папок — UTF‑8. Убедитесь, что резервные копии, ротация и скрипты учёта корректно работают с такими путями.
  • Скрипты интеграции (экспорты в CRM и т. п.) готовы к Unicode‑адресам в заголовках From/To/Reply‑To.
  • Если используете SQL/LDAP для директорий и алиасов — колонки и соединения должны быть в UTF‑8.

Диагностика и типичные ошибки

  • Нет «250‑SMTPUTF8» в EHLO. Проверьте smtputf8_enable и не отключены ли расширения через smtpd_discard_ehlo_keywords.
  • LMTP не принимает Unicode. Убедитесь, что доставка идёт в Dovecot LMTP, а не в локальный агент. Проверьте сокет и логи Dovecot.
  • «SMTPUTF8 is required, but not offered». Ищите виновника по цепочке: входящий SMTP, фильтр, исходящий SMTP/LMTP.
  • Клиент не создаёт папки с Unicode‑именами. Проверьте IMAP CAPABILITY на «UTF8=ACCEPT» и настройки клиента.
  • Нечитаемые символы в журналах/скриптах. Где‑то не UTF‑8. Проверьте локали сервисов, кодировку файлов карт Postfix и соединений к БД.

Откат

Если после включения обнаружились критичные несовместимости, откат делается быстро:

  1. В Postfix установить smtputf8_enable = no, выполнить postfix reload.
  2. Сообщить пользователям, что приём Unicode‑адресов временно недоступен (опционально задать ASCII‑алиасы).
  3. Разобрать цепочку, где именно ломается поддержка, и возвращаться точечно.

Контрольная памятка перед продом

  • Postfix 3.x и smtputf8_enable = yes.
  • Рабочий LMTP к Dovecot, проверен диалог LHLO.
  • Карты виртуальных алиасов и транспортов — в UTF‑8, тестовые Unicode‑адреса принимаются.
  • IMAP CAPABILITY содержит UTF8=ACCEPT, клиенты создают/читают папки с Unicode‑именами.
  • Фильтры/антивирусы пропускают письма с Unicode‑адресами без порчи заголовков.
  • Набор тестов: входящие/исходящие, большие письма, вложения, пересылка, автоответчики.

Итоги

Включение EAI/SMTPUTF8 в связке Postfix + Dovecot — это уже рутинная задача: пара настроек в Postfix, проверка LMTP‑цепочки и внимательное отношение к кодировкам. Острые углы — совместимость с узлами без SMTPUTF8 и состояние фильтров на пути. Решаются они организационно (алиасы‑двойники, согласование с контрагентами) и технично (маршрутизация через совместимый релей, корректная валидация на входе). Сделайте это один раз методично — и ваша почтовая система безболезненно примет письма с адресов на родном языке.

Поделиться статьей

Вам будет интересно

Debian/Ubuntu: mount: wrong fs type, bad option, bad superblock — как быстро найти и исправить причину OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: mount: wrong fs type, bad option, bad superblock — как быстро найти и исправить причину

Ошибка mount: wrong fs type, bad option, bad superblock в Debian/Ubuntu может означать и простую опечатку в имени раздела, и пробл ...
Debian/Ubuntu: XFS metadata corruption и emergency read-only — пошаговое восстановление OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: XFS metadata corruption и emergency read-only — пошаговое восстановление

Если XFS-раздел внезапно стал доступен только для чтения, а сервер ушёл в emergency mode, главное — не спешить. Разберём безопасны ...
Debian/Ubuntu: как исправить Failed to fetch при apt update OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: как исправить Failed to fetch при apt update

Ошибка Failed to fetch при apt update в Debian и Ubuntu обычно связана не с самим APT, а с DNS, сетью, зеркалом, прокси, временем ...