Как отправить email из 1С на кириллический домен?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции систем или настройке автоматических рассылок мы часто сталкиваемся с нестандартными форматами данных. Рассмотрим ситуацию: у нас есть почтовый адрес с кириллическим доменом (например, multuk@почта.рф). При попытке отправить письмо на такой email стандартными средствами 1С, почтовый SMTP-сервер справедливо отклоняет запрос и возвращает ошибку: SMTP error code 501 5.1.3 Bad recipient address syntax.

Давайте разберем по шагам, почему возникает эта ошибка, выясним причину такого поведения серверов и проанализируем доступные пути решения проблемы как для текущих версий платформы, так и для будущих релизов.

Почему возникает ошибка синтаксиса адреса получателя?

Исторически протоколы передачи электронной почты (SMTP, POP3, IMAP) создавались с расчетом на использование исключительно латинского алфавита и базовых символов (кодировка ASCII). Когда появились национальные домены (такие как .рф, .бел и другие), старые почтовые сервера оказались не готовы корректно обрабатывать кириллические символы в адресах. Именно поэтому сервер сообщает о неверном синтаксисе адресата — он просто не может прочитать символы, выходящие за рамки стандартной латиницы.

Решение проблемы в версиях платформы до 8.3.27: использование Punycode

Если мы используем платформу версии ниже 8.3.27, нам необходимо самостоятельно подготовить email-адрес перед его передачей почтовому серверу. Посмотрим на механизм под названием Punycode. Это стандартизированный метод преобразования Unicode-строк (в нашем случае — кириллицы) в ограниченный набор символов ASCII, который понятен любому SMTP-серверу.

При использовании этого метода кириллический домен почта.рф преобразуется в строку вида xn--80a1acny.xn--p1ai. Если мы запишем адрес как multuk@xn--80a1acny.xn--p1ai, то письмо успешно отправится.

Проанализируем, какими способами мы можем выполнить конвертацию домена в Punycode внутри 1С:

  1. Реализация алгоритма на встроенном языке 1С: Написание математического преобразования символов Unicode в строку ACE/Punycode напрямую в коде. Это сложное, но наиболее независимое решение.
  2. Использование COM-объектов: В среде Windows мы можем использовать объект MSScriptControl.ScriptControl для вызова готовых JavaScript-функций, которые выполнят преобразование доменного имени.
  3. HTTP-запросы к внешним REST API: Мы можем обратиться к бесплатным веб-сервисам конвертерам. Этот способ прост в реализации, но требует стабильного доступа в интернет.

Рассмотрим пример того, как логически должна выглядеть подготовка адреса в коде:


// Пример логики подготовки адреса перед отправкой
АдресПолучателя = "multuk@почта.рф";
ЧастиАдреса = СтрРазделить(АдресПолучателя, "@");

Если ЧастиАдреса.Количество() = 2 Тогда
    ИмяПользователя = ЧастиАдреса[0];
    ДоменноеИмя = ЧастиАдреса[1];
    
    // Проверяем наличие не-ASCII символов и конвертируем
    Если СодержитКириллицу(ДоменноеИмя) Тогда
        ДоменPunycode = СконвертироватьДоменВПьюникод(ДоменноеИмя); // Ваша функция конвертации
        ГотовыйАдрес = ИмяПользователя + "@" + ДоменPunycode;
    Иначе
        ГотовыйАдрес = АдресПолучателя;
    КонецЕсли;
КонецЕсли;

Кириллица в имени пользователя: нюансы протокола SMTPUTF8

Выше мы разобрали ситуацию, когда кириллица находится только в доменной части (после символа @). Но давайте проанализируем ситуацию, если кириллица содержится и в имени почтового ящика (например, директор@почта.рф).

В этом случае конвертация одного лишь домена в Punycode не спасет ситуацию. Для поддержки национальных алфавитов в локальной части email-адреса применяется расширение протокола SMTPUTF8. В отличие от заблуждений, встречающихся на форумах (где советуют использовать кодировку UTF-7), современные стандарты предписывают использовать именно UTF-8. Кодировка UTF-7 исторически применялась только для кириллических имен папок на IMAP-серверах (например, для папки "Отправленные"), но не для самих email-адресов.

Важное ограничение: Чтобы письмо успешно ушло на адрес с кириллическим логином, ваш исходящий SMTP-сервер и принимающий сервер получателя должны обязательно поддерживать расширение SMTPUTF8. Если сервер его не поддерживает, он отклонит письмо даже при корректном Punycode-домене.

Нативная поддержка EAI в 1С:Предприятие 8.3.27

Теперь обратим внимание на отличные новости для разработчиков. Начиная с версии платформы 1С:Предприятие 8.3.27, реализована нативная поддержка интернационализированных почтовых адресов (стандарт EAI — Email Address Internationalization).

Что это означает на практике?

  1. Нам больше не потребуется использовать внешние инструменты, библиотеки, COM-объекты или писать сложные парсеры на встроенном языке.
  2. Платформа "под капотом" сама понимает кириллические адреса.
  3. Объекты для работы с почтой (например, ИнтернетПочта, ИнтернетПочтовоеСообщение) будут корректно и автоматически обрабатывать национальные домены при взаимодействии с серверами по протоколам SMTP, IMAP и POP3.

Таким образом, если вы столкнулись с проблемой отправки почты на домены .рф, наиболее правильным стратегическим решением будет планирование обновления платформы до версии 8.3.27 и выше. А до момента обновления используйте программную конвертацию доменной части в Punycode-формат.

← На главную