Как автоматически определить параметры профиля почты в 1С по адресу отправителя?

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

При реализации механизмов отправки электронных писем из 1С разработчики часто сталкиваются с задачей максимально упростить настройку для конечного пользователя. В идеальном сценарии пользователю достаточно ввести свой почтовый адрес и пароль, а остальные технические параметры — адрес SMTP-сервера, порт, использование SSL/TLS — система должна определить автоматически. Разберем, какие подходы и алгоритмы позволяют решить эту задачу на платформе 1С:Предприятие 8.3.

Способ 1. Использование таблицы соответствий (пресетов популярных сервисов)

Самый надежный и быстрый способ, применяемый в типовых конфигурациях на базе «Библиотеки стандартных подсистем» (БСП), — использование заранее подготовленной базы настроек для известных почтовых провайдеров.

Разберем по шагам логику работы этого метода:

  1. Из введенного адреса электронной почты извлекаем доменную часть (все символы после знака @).
  2. Выполняем поиск домена в справочнике или предопределенной таблице соответствий.
  3. Если соответствие найдено, автоматически подставляем хост, порт и признак безопасного соединения.

Посмотрим на пример функции, разбирающей email и возвращающей структуру параметров:


Функция ПолучитьПараметрыПочтовогоСервера(Знач АдресПочты)
    
    Параметры = Новый Структура;
    Параметры.Вставить("СерверОтправки", "");
    Параметры.Вставить("ПортОтправки", 465);
    Параметры.Вставить("ИспользоватьSSL", Истина);
    
    ПозицияСобаки = СтрНайти(АдресПочты, "@");
    Если ПозицияСобаки = 0 Тогда
        Возврат Параметры;
    КонецЕсли;
    
    Домен = НРег(Сред(АдресПочты, ПозицияСобаки + 1));
    
    Если Домен = "yandex.ru" Или Домен = "ya.ru" Тогда
        Параметры.СерверОтправки = "smtp.yandex.ru";
        Параметры.ПортОтправки   = 465;
        Параметры.ИспользоватьSSL = Истина;
    ИначеЕсли Домен = "mail.ru" Или Домен = "bk.ru" Или Домен = "inbox.ru" Или Домен = "list.ru" Тогда
        Параметры.СерверОтправки = "smtp.mail.ru";
        Параметры.ПортОтправки   = 465;
        Параметры.ИспользоватьSSL = Истина;
    ИначеЕсли Домен = "gmail.com" Тогда
        Параметры.СерверОтправки = "smtp.gmail.com";
        Параметры.ПортОтправки   = 465;
        Параметры.ИспользоватьSSL = Истина;
    КонецЕсли;
    
    Возврат Параметры;
    
КонецФункции

Способ 2. Эвристический перебор и тестовое подключение

Если домен является корпоративным или отсутствует в базе шаблонов, применяют метод эвристического подбора, аналогичный механизмам БСП. Проанализируем алгоритм:

  1. На основе домена формируются типовые варианты имен почтовых серверов: smtp.<домен> и mail.<домен>.
  2. Поочередно проверяется подключение к стандартным защищенным портам отправки почты — 465 (SSL) и 587 (STARTTLS). Обратите внимание: стандартный незашифрованный порт 25 использовать для клиентской отправки не рекомендуется, так как большинство интернет-провайдеров и хостингов блокируют исходящий трафик по нему в целях защиты от спама.
  3. Выполняется попытка подключения через объект платформы ИнтернетПочта. В случае успешного соединения без ошибок параметры фиксируются в профиле.

Способ 3. Использование стандартных протоколов автоконфигурации (Autoconfig / Autodiscover)

Для создания универсального решения можно отправлять HTTP-запросы к публичным сервисам автонастройки почтовых клиентов через объект HTTPСоединение:

  1. Mozilla Autoconfig: отправка запроса по шаблону https://autoconfig.<домен>/mail/config-v1.1.xml или к глобальной базе провайдеров Mozilla ISPDB. Сервис возвращает XML-файл с точными адресами серверов, портами и типами аутентификации.
  2. Microsoft Autodiscover: актуально для корпоративных серверов Microsoft Exchange (запрос по адресу https://autodiscover.<домен>/autodiscover/autodiscover.xml).

В платформе 1С отсутствуют встроенные методы для прямого чтения DNS-записей (MX или SRV-записей _submission._tcp.<домен>). Если требуется получить MX-записи домена, используют либо внешние утилиты операционной системы, либо запросы к сервисам DNS-over-HTTPS (DoH).

Особенности аутентификации на современных почтовых серверах

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

Большинство почтовых сервисов (Яндекс, Mail.ru, Google и др.) по соображениям безопасности запрещают прямую базовую аутентификацию по основному паролю почтового ящика. Для работы из 1С пользователю необходимо:

  1. Перейти в настройки безопасности своего почтового аккаунта в браузере.
  2. Сгенерировать отдельный пароль приложения для протокола SMTP/IMAP.
  3. Использовать сгенерированный пароль в 1С вместо основного пароля от учетной записи.
← На главную