Как исправить ошибку «Код ошибки 3. capability list follows» при получении почты в 1С на Linux?

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

При переходе с операционной системы Windows на Linux администраторы и разработчики 1С часто сталкиваются с тем, что привычный функционал начинает вести себя иначе. Одной из наиболее специфических проблем является отказ в получении почты через протокол POP3, сопровождающийся сообщением: «Произошла ошибка при работе с POP3. Код ошибки: 3. Ответ сервера: Capability list follows». Примечательно, что на Windows-клиентах или через Telnet тот же почтовый ящик работает без нареканий.

В рамках данной статьи мы подробно разберем, почему возникает эта ошибка, как интерпретировать ответ почтового сервера и какими методами можно восстановить работоспособность системы в среде Linux.

Анализируем суть ошибки и протокола POP3

Для начала проанализируем ситуацию: фраза Capability list follows сама по себе не является текстом ошибки в привычном понимании. В протоколе POP3 это стандартный ответ сервера на команду CAPA. Эта команда запрашивает у сервера список поддерживаемых расширений и методов аутентификации (например, поддержку TLS, способов кодирования паролей и т.д.).

Проблема заключается в том, что реализация почтового клиента в платформе 1С под Linux (особенно в версиях линейки 8.3.13 и 8.3.14) ожидает от сервера немедленного перехода к авторизации. Когда сервер в ответ на запрос присылает техническую информацию о своих возможностях, линуксовый модуль 1С может воспринять это как нештатное поведение или прерывание сессии, выдавая «Код ошибки 3». Таким образом, мы имеем дело с некорректным парсингом сетевого трафика внутри самой платформы.

Разберем влияние системных библиотек Linux

В отличие от Windows, где 1С использует встроенные компоненты операционной системы, в Linux-среде платформа опирается на системные библиотеки, такие как OpenSSL и GnuTLS. Выясним, как это влияет на подключение:

  1. Уровень безопасности OpenSSL (SECLEVEL): В современных дистрибутивах Linux (Ubuntu 20.04+, Debian 10+) по умолчанию установлен SECLEVEL=2. Это означает, что если почтовый сервер использует устаревшие алгоритмы шифрования или короткие ключи, библиотека безопасности на стороне Linux просто обрывает соединение. Даже если вы используете порт 110 (без явного SSL), 1С может попытаться выполнить команду STLS (переход на защищенное соединение), если увидит её в списке возможностей сервера.
  2. Методы аутентификации (SASL): На Linux платформа более строго следует стандартам. Если сервер заявляет поддержку CRAM-MD5 или DIGEST-MD5, 1С может попытаться использовать их вместо простого LOGIN или PLAIN. Если в системе не установлены пакеты libgsasl7 или cyrus-sasl, попытка авторизации провалится с ошибкой «Некорректный пароль», хотя сам пароль верен.

Проверяем кодировки и спецсимволы

Рассмотрим еще один важный момент — кодировку данных. В Windows-версии 1С передача логина и пароля может неявно происходить в кодировке Windows-1251. Однако в Linux-версии платформа жестко работает в UTF-8. Проанализируем ситуацию: если ваш почтовый пароль или имя пользователя содержат кириллические символы или специфические знаки пунктуации, сервер может получить их в неверном виде.

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

Решение №1: Понижение уровня безопасности OpenSSL

Если обновление платформы 1С до актуальной версии (например, 8.3.20+) невозможно, попробуем настроить системную среду так, чтобы она была более «терпима» к почтовому серверу. Для этого нам необходимо отредактировать конфигурационный файл OpenSSL.

Выполним следующие шаги по шагам:

  1. Откроем файл /etc/ssl/openssl.cnf (путь может отличаться в зависимости от дистрибутива).
  2. Найдем секцию [system_default_sect].
  3. Изменим строку CipherString = DEFAULT@SECLEVEL=2 на CipherString = DEFAULT@SECLEVEL=1.
  4. Перезапустим службу сервера 1С:Предприятие.

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

Решение №2: Использование stunnel в качестве прокладки

Проанализируем ситуацию, когда мы не можем изменить настройки почтового сервера или системные библиотеки. В этом случае наиболее стабильным решением является использование stunnel. Это небольшая утилита-прокси, которая берет на себя всю работу по установке соединения, шифрованию и согласованию протоколов.

Схема работы будет выглядеть так: 1С подключается к localhost по незащищенному каналу, а stunnel перебрасывает этот трафик на реальный почтовый сервер.

Рассмотрим пример настройки stunnel на Linux-сервере:


# Установим stunnel
sudo apt-get install stunnel4

# Создадим конфигурационный файл /etc/stunnel/pop3.conf
[pop3-proxy]
client = yes
accept = 127.0.0.1:1110
connect = mail.yourserver.ru:110

После запуска службы stunnel, в коде 1С при создании профиля почты укажите адрес сервера "127.0.0.1" и порт 1110. Платформа будет думать, что работает с локальным простым сервером, а все сложности с capability list и шифрованием возьмет на себя прокси.

Решение №3: Корректная настройка профиля в коде 1С

Посмотрим на программную часть. При создании объекта ИнтернетПочтовыйПрофиль в Linux-среде следует явно указывать параметры, которые в Windows могли определяться автоматически. Рассмотрим пример кода:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераPOP3 = "127.0.0.1"; // Используем прокси или прямой адрес
Профиль.ПортPOP3 = 110;
Профиль.Пользователь = "login@domain.ru";
Профиль.Пароль = "P@ssword";
Профиль.ТолькоЛогинPOP3 = Истина; // Важный флаг для некоторых Linux-сборок

// Если сервер требует предварительную авторизацию на SMTP
Профиль.АдресСервераSMTP = "mail.yourserver.ru";
Профиль.ПортSMTP = 25;
Профиль.ИспользоватьБезопасноеСоединениеSMTP = Ложь;

Флаг ТолькоЛогинPOP3 (если доступен в вашей версии платформы) может помочь принудительно использовать упрощенную схему авторизации, игнорируя расширенные возможности, перечисляемые сервером в списке CAPA.

Диагностика сетевого взаимодействия

Если ни один из способов не помог, проанализируем ситуацию с помощью системных утилит. Это поможет выяснить, на каком именно этапе происходит обрыв. Используем tcpdump для захвата пакетов на сервере 1С:

sudo tcpdump -X -s 0 host mail.yourserver.ru and port 110

Запустите получение почты в 1С и посмотрите на вывод в консоли. Если вы видите, что после строки +OK Capability list follows сервер отправляет данные, а 1С сразу присылает пакет FIN (завершение соединения), значит, проблема действительно в баге платформы, которая не дожидается окончания списка. В этом случае единственным стопроцентным решением остается обновление версии платформы 1С или использование stunnel.

Выводы

Мы выяснили, что ошибка «Код ошибки 3» на Linux чаще всего связана с излишней «чувствительностью» платформы 1С к техническим ответам POP3-сервера. Для решения проблемы мы рекомендуем:

  1. Проверить версию платформы и по возможности обновить её до последней актуальной.
  2. Настроить stunnel для исключения прямого взаимодействия 1С с капризными почтовыми серверами.
  3. Убедиться, что в системе установлены все необходимые библиотеки аутентификации (SASL).
  4. Проверить настройки безопасности OpenSSL в конфигурационных файлах ОС.
← На главную