Почему долго отправляется почтовое сообщение из 1С и как это исправить?

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

Многие технические специалисты сталкиваются с ситуацией, когда метод Послать объекта ИнтернетПочта выполняется неоправданно долго — от 20 до 40 секунд на одно простое текстовое письмо. Это создает серьезные неудобства для пользователей, так как в момент отправки интерфейс программы может «зависать», блокируя работу. Разберем подробно, почему это происходит и как оптимизировать процесс взаимодействия 1С с почтовым сервером (чаще всего MS Exchange).

Диагностика проблемы: 1С или почтовый сервер?

Прежде чем приступать к глубоким настройкам, проанализируем, на каком этапе возникает задержка. Если отправка через внешние сервисы (например, mail.ru или yandex.ru) происходит мгновенно (за 0.5–1 сек), а задержки наблюдаются только с внутренним MS Exchange, проблема кроется в настройках безопасности или протоколах взаимодействия сервера. Рассмотрим простой способ проверки скорости отправки в обход стандартных механизмов платформы с помощью объекта CDO.Message. Это поможет выяснить, виновата ли сама платформа 1С или сетевые настройки.


Функция ОтправитьПисьмоЧерезCDO()
    Попытка
        CDO = Новый COMОбъект("CDO.Message");
    Исключение
        Сообщить("Ошибка: объект CDO.Message не создан");
        Возврат Ложь;
    КонецПопытки;
    
    CDO.From = "sender@company.com";
    CDO.To = "receiver@company.com";
    CDO.Subject = "Тестовое письмо CDO";
    CDO.Textbody = "Текст сообщения";
    
    Item = "http://schemas.microsoft.com/cdo/configuration/sendusing";
    CDO.Configuration.Fields.Item(Item).Value = 2; // SMTP
    
    Item = "http://schemas.microsoft.com/cdo/configuration/smtpserver";
    CDO.Configuration.Fields.Item(Item).Value = "192.168.1.10"; // IP вашего сервера
    
    Item = "http://schemas.microsoft.com/cdo/configuration/smtpserverport";
    CDO.Configuration.Fields.Item(Item).Value = 25;
    
    CDO.Configuration.Fields.Update();
    
    Попытка
        Начало = ТекущаяДата();
        CDO.Send();
        Сообщить("Отправлено за: " + (ТекущаяДата() - Начало) + " сек.");
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
КонецФункции

Решение 1: Настройка коннектора MS Exchange

Проанализируем наиболее частую причину задержек при работе с MS Exchange. Сервер по умолчанию применяет защитные механизмы против спама и перегрузок, которые могут воспринимать частые запросы от сервера 1С как подозрительные. Для исправления ситуации необходимо настроить отдельный коннектор получения (Receive Connector) специально для IP-адреса сервера 1С.

Выясним, какие параметры на стороне Exchange влияют на скорость:

  1. TarpitInterval: Это намеренная задержка ответа сервера SMTP для борьбы со спамом. По умолчанию она может составлять 5 секунд на каждый неверный адрес или команду. Установите значение в 0.
  2. MaxAcknowledgementDelay: Задержка подтверждения получения данных. Сервер может ждать до 30 секунд, прежде чем отправить подтверждение 1С. Установите 0.

Порядок действий для системного администратора:

  1. Создайте новый Receive Connector с типом Custom.
  2. В разделе Remote Network Settings укажите только IP-адрес сервера 1С.
  3. В настройках аутентификации разрешите Externally Secured (если серверу 1С можно доверять) или настройте анонимный прием, если 1С отправляет почту без авторизации.
  4. Примените команды в Exchange Management Shell:

Set-ReceiveConnector "Имя_Коннектора_1С" -TarpitInterval 00:00:00
Set-ReceiveConnector "Имя_Коннектора_1С" -MaxAcknowledgementDelay 00:00:00

Решение 2: Проблемы DNS и IPv6

Рассмотрим ситуацию, когда 1С долго пытается «достучаться» до сервера. Начиная с версии 8.3.10, платформа активно использует IPv6. Если в вашей сети настроен DNS, который возвращает IPv6-адрес сервера Exchange, но сам сервер или маршрутизаторы работают с ним некорректно, 1С будет ждать таймаута подключения (обычно около 20 секунд), прежде чем переключиться на IPv4.

Что нужно сделать:

  1. В настройках почтового профиля в 1С (справочник УчетныеЗаписиЭлектроннойПочты) укажите вместо DNS-имени сервера его прямой IP-адрес (IPv4). Это исключит лишние запросы к DNS-серверу.
  2. Проверьте наличие PTR-записи (обратная зона DNS) для IP-адреса сервера 1С. Почтовые серверы часто проверяют, соответствует ли IP-адрес отправителя его имени в сети. Если ответа нет, сервер ждет таймаута.

Решение 3: Особенности платформы 1С и протоколов TLS/SSL

Проанализируем изменения в платформе 1С. Начиная с версии 8.3.9, была введена полная поддержка шифрования. Если в настройках учетной записи указано использование защищенного соединения, 1С тратит значительное время на согласование сертификатов и протоколов (Handshake). Иногда платформа пытается использовать STARTTLS даже там, где это не требуется.

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


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "192.168.1.10";
Профиль.ПортSMTP = 25;

// Явное отключение защищенных протоколов для внутренней сети
Профиль.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь;
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Ложь;

// Если используется MS Exchange внутри сети, часто лучше использовать аутентификацию по умолчанию
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.БезАутентификации; 

Также замечена интересная особенность: если в учетной записи 1С заполнены настройки для входящей почты (IMAP/POP3), платформа может пытаться проверить соединение с ними при инициализации почтового сеанса. Попробуйте очистить параметры СерверВходящейПочты или установить там localhost, если учетная запись используется только на отправку.

Решение 4: Фоновая отправка сообщений

Если после всех настроек время отправки сократилось до 1–3 секунд, но это все равно мешает пользователям при массовой рассылке, рассмотрим архитектурное решение. Вместо того чтобы вызывать метод Послать непосредственно в коде кнопки, следует записывать данные письма в специальный регистр сведений (очередь писем) и отправлять их регламентным заданием в фоновом режиме.

Преимущества такого подхода:

Подведем итоги

Выясним последовательность действий при возникновении задержек:

  1. Проверьте скорость отправки через сторонний SMTP (например, yandex.ru). Если там быстро — проблема в локальном сервере или DNS.
  2. Используйте IP-адрес вместо имени сервера в настройках 1С.
  3. Настройте Exchange Receive Connector: уберите TarpitInterval и добавьте IP сервера 1С в исключения.
  4. Убедитесь, что антивирус на сервере 1С не проверяет исходящий SMTP-трафик (порты 25, 465, 587).
  5. В крайнем случае перейдите на использование объекта CDO.Message через COM-соединение, который работает стабильнее в средах Windows.
← На главную