Что делать, если в 1С перестала работать отправка и получение почты через стандартные методы?

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

Проблемы с почтовой интеграцией в 1С — это одна из самых коварных категорий ошибок, так как она находится на стыке прикладного кода, сетевых протоколов, настроек безопасности операционной системы и конфигурации почтового сервера. Часто мы сталкиваемся с ситуацией, когда вчера всё работало, а сегодня пользователи получают ошибки вида «Ошибка при вызове метода контекста (Послать)» или «Ошибка при работе с POP3. Код ошибки: 6». Ситуация осложняется тем, что встроенные средства диагностики 1С не всегда дают исчерпывающий ответ.

В этой статье мы подробно разберем, как диагностировать причины внезапного отказа почты, проанализируем специфические ошибки сетевого уровня и рассмотрим надежный «костыль» (обходное решение) через использование COM-объекта, который поможет восстановить работу системы, когда стандартные методы платформы бессильны.

Анализируем симптомы и системные логи

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

Критически важным является лог почтового сервера (например, Postfix на Linux). Если системный администратор видит запись вида lost connection after DATA (6 bytes) from sqlsrv.*******.local, это прямой сигнал о том, что соединение устанавливается, авторизация проходит, но при попытке передать тело письма происходит разрыв. Рассмотрим основные причины такого поведения:

  1. Проблема фрагментации пакетов (MTU): Когда 1С начинает передавать основной объем данных письма после команды DATA, размер сетевых пакетов увеличивается. Если на маршруте между сервером 1С и почтовым сервером есть узел с меньшим параметром MTU (Maximum Transmission Unit), пакеты могут отбрасываться.
  2. Конфликты протоколов TLS: Современные почтовые серверы на Linux часто требуют TLS 1.2 или 1.3. Если сервер 1С работает под управлением старой версии Windows или в системе не настроены соответствующие шифры (Ciphers), библиотека 1С может некорректно завершать сессию.
  3. Вмешательство антивирусного ПО: Антивирусы на Windows-серверах часто пытаются сканировать исходящий SMTP-трафик на лету. Если они подменяют сертификат или задерживают пакеты для анализа, 1С обрывает соединение по таймауту или из-за ошибки проверки подписи.

Использование обходного пути: Метод CDO.Message

Если стандартный объект ИнтернетПочта и методы БСП (Библиотеки Стандартных Подсистем) отказываются работать из-за специфических настроек безопасности сети, проверенным временем решением является использование COM-объекта CDO.Message. Этот метод использует системные библиотеки Windows, которые зачастую более толерантны к нюансам настроек TLS и сетевым задержкам.

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


// Создание объекта сообщения
ПочтаСообщение = Новый COMОбъект("CDO.Message");
Конфигурация = Новый COMОбъект("CDO.Configuration");

// Настройка параметров сервера
Поля = Конфигурация.Fields;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2; // cdoSendUsingPort
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.yourserver.ru";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465; // Или 587/25
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1; // cdoBasic
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "login@domain.ru";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "password";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = Истина;

Поля.Update();

// Формирование письма
ПочтаСообщение.Configuration = Конфигурация;
ПочтаСообщение.From = "login@domain.ru";
ПочтаСообщение.To = "recipient@mail.ru";
ПочтаСообщение.Subject = "Тестовое письмо из 1С через CDO";
ПочтаСообщение.TextBody = "Текст сообщения";

// Попытка отправки
Попытка
    ПочтаСообщение.Send();
    Сообщить("Письмо успешно отправлено!");
Исключение
    Сообщить("Ошибка отправки через CDO: " + ОписаниеОшибки());
КонецПопытки;

Использование этого метода позволяет обойти внутренние механизмы 1С по работе с OpenSSL или системным Schannel, которые могут конфликтовать с обновленными настройками почтового сервера.

Тонкая настройка ИнтернетПочтовыйПрофиль в 1С

Прежде чем полностью переходить на CDO, попробуем «дожать» типовые механизмы. Проанализируем объект ИнтернетПочтовыйПрофиль. В последних версиях платформы 1С добавлено много свойств для управления шифрованием. Выясним, какие комбинации настроек могут помочь:

Рассмотрим пример настройки профиля в коде:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "user";
Профиль.ПарольSMTP = "pass";
Профиль.ИспользоватьЗащищенноеСоединениеДляОтправки = СпособИспользованияЗащищенногоСоединения.SSL;
Профиль.ТолькоЗащищеннаяАвторизацияSMTP = Ложь;
Профиль.Таймаут = 60;

Почта = Новый ИнтернетПочта;
Попытка
    Почта.Подключиться(Профиль);
    // ... логика отправки ...
    Почта.Отключиться();
Исключение
    // Обработка ошибки
КонецПопытки;

Проверка системных настроек Windows и сетевого стека

Если программные методы не помогают, нам следует совместно с системным администратором проверить следующие параметры:

  1. MTU на сетевом интерфейсе: Проанализируем размер MTU. Если он равен 1500, попробуем временно снизить его до 1400 на сервере 1С командой:
    netsh interface ipv4 set subinterface "ИмяИнтерфейса" mtu=1400 store=persistent. Если после этого отправка 10 из 10 писем проходит успешно — проблема в сетевом оборудовании.
  2. IPv6: Проверим, не пытается ли 1С стучаться на почтовый сервер по IPv6. Если в DNS прописаны обе записи (A и AAAA), Windows может отдавать приоритет IPv6, который на почтовом сервере может быть настроен некорректно. Попробуем временно отключить IPv6 в свойствах сетевого адаптера.
  3. Журнал Schannel: В журнале событий Windows (System) поищем ошибки от источника Schannel. Они укажут на несовместимость алгоритмов шифрования (например, сервер требует AES-256, а в Windows разрешен только AES-128).

Итоги и рекомендации

Подводя итог, можно сказать, что постепенный отказ почты в 1С (когда письма отправляются через раз) — это классический признак сетевых проблем или проблем с рукопожатием (handshake) TLS.

Рекомендуемый алгоритм действий:

  1. Проверьте логи почтового сервера на наличие обрывов после команды DATA.
  2. Попробуйте разные способы шифрования (STARTTLS vs SSL) в настройках учетной записи 1С.
  3. Если стандартные методы 1С стабильно выдают ошибку, внедрите временную отправку через CDO.Message для критически важных процессов (например, регламентированной отчетности).
  4. Проверьте настройки MTU и антивирусные исключения для процесса rphost.exe.

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

← На главную