Как исправить ошибку IMAP с кодом 11 «Cannot deliver the message» при отправке почты в 1С

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

При работе с почтовыми сообщениями в системе 1С:Предприятие разработчики и системные администраторы часто сталкиваются с загадочной ошибкой: «Произошла ошибка при работе с IMAP, Код ошибки 11. Cannot deliver the message». Эта ситуация кажется парадоксальной, так как проверка учетной записи проходит успешно, но при попытке программной отправки через метод Послать система выдает исключение. В рамках данной статьи мы подробно разберем, почему возникает эта ошибка, что на самом деле делает протокол IMAP в контексте отправки и как правильно настроить систему для стабильной работы.

Разбор механизма работы 1С с протоколами IMAP и SMTP

Для начала проанализируем ситуацию, описанную в исходном коде. В типовых конфигурациях (таких как 1С:Комплексная автоматизация или ERP) часто встречается блок кода, использующий объект ИнтернетПочта. Давайте посмотрим на типовой фрагмент, где возникает сбой:


Если (ПротоколПочты = "IMAP" Или ПротоколПочты = "Все") И ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP Тогда
    Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, ПротоколИнтернетПочты.IMAP);
    // ... дальнейшая обработка
КонецЕсли;

Многих смущает использование ПротоколИнтернетПочты.IMAP внутри метода Послать. Мы привыкли, что для получения почты используется IMAP или POP3, а для отправки — SMTP. И это абсолютно верно. Однако в логике 1С и многих почтовых серверов метод Послать с параметром IMAP выполняет не саму доставку письма адресату, а команду APPEND.

Рассмотрим подробнее: когда мы вызываем этот метод, 1С пытается «докачать» (записать) тело письма непосредственно в структуру папок на почтовом сервере (обычно в папку «Отправленные» или «Sent»). Это необходимо для того, чтобы письмо, отправленное из программы, синхронизировалось и отображалось в вашем почтовом ящике при просмотре через браузер или мобильный клиент. Ошибка 11 означает, что сервер по какой-то причине отказал в приеме данных именно на этапе записи сообщения в папку через IMAP-сессию.

Выясним причины возникновения ошибки 11

Проанализируем основные факторы, которые приводят к сообщению «Cannot deliver the message» при работе через IMAP:

  1. Несоответствие имен папок: Почтовый сервер может ожидать записи в папку с названием "Sent", в то время как 1С пытается обратиться к папке "Отправленные" (или наоборот). Если папка не найдена или доступ к ней ограничен, сервер возвращает ошибку выполнения команды.
  2. Ограничения прав доступа (Авторизация): Даже если проверка учетной записи проходит успешно, у пользователя могут быть права на чтение входящих сообщений, но отсутствовать права на запись (создание объектов) в системных папках сервера.
  3. Использование обычных паролей вместо «Паролей приложений»: Современные сервисы (Mail.ru, Яндекс, Gmail) требуют создания специального пароля для сторонних приложений. Обычный пароль может позволить авторизоваться, но заблокировать команды изменения структуры данных (такие как APPEND).
  4. Проблемы протокола TLS/SSL: Платформы старых релизов (например, 8.3.16.1148) могут иметь проблемы с поддержкой современных сертификатов безопасности и протоколов TLS 1.2/1.3, что приводит к разрыву соединения в момент передачи тяжелых данных (тела письма).

Решение 1: Перевод отправки на протокол SMTP

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

Вместо вызова метода с параметром ПротоколИнтернетПочты.IMAP, необходимо убедиться, что выполняется ветка кода для SMTP:


// Принудительное использование SMTP для отправки
ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, ПротоколИнтернетПочты.SMTP);

При использовании ПротоколИнтернетПочты.SMTP почтовый сервер берет на себя ответственность за доставку письма конечному адресату. Большинство современных серверов (включая mail.ru) автоматически сохраняют копию письма в папку «Отправленные», если отправка прошла успешно через их SMTP-шлюз, поэтому дублирование команды через IMAP часто бывает избыточным и лишь плодит ошибки.

Решение 2: Настройка учетной записи в 1С

Рассмотрим по шагам, как проверить настройки в интерфейсе программы (без изменения кода):

  1. Перейдите в раздел Администрирование — Настройки почты — Учетные записи электронной почты.
  2. Откройте проблемную учетную запись.
  3. Проверьте сервер исходящей почты. Для Mail.ru это должен быть smtp.mail.ru, порт 465, с включенным использованием SSL.
  4. Обратите внимание на настройки папок. Если в конфигурации есть возможность выбора папок для хранения (обычно в дополнительных настройках), нажмите на кнопку выбора рядом с полем «Папка для отправленных» и выберите папку из списка, который вернет сервер. Это гарантирует правильное имя папки.
  5. Если ошибка 11 сохраняется, попробуйте снять флаг «Оставлять копии сообщений на сервере» или аналогичную настройку, отвечающую за синхронизацию отправленных через IMAP.

Решение 3: Проверка безопасности на стороне почтового сервиса

Если вы используете Mail.ru (как в примере темы), выполните следующие действия:

Войдите в веб-интерфейс почты, перейдите в Настройки — Пароль и безопасность — Пароли для внешних приложений. Создайте новый пароль, назовите его «1С» и используйте именно его в настройках 1С вместо основного пароля от почтового ящика. Это устраняет 90% проблем с авторизацией и выполнением команд APPEND в IMAP.

Технические нюансы платформы 8.3.16

Важно помнить, что версия 8.3.16.1148 является достаточно старой. В ней могут наблюдаться специфические баги при обработке кириллических имен папок в кодировке UTF-7 Modified (стандарт IMAP). Если сервер возвращает имена папок на русском языке, платформа может некорректно интерпретировать строку, что приведет к ошибке 11. В таком случае рекомендуется либо обновить платформу до актуальной версии (например, 8.3.22+), либо использовать исключительно SMTP-протокол для отправки сообщений, так как он менее чувствителен к структуре папок на сервере.

Резюме: Ошибка 11 «Cannot deliver the message» в контексте IMAP — это сигнал о том, что программа не смогла сохранить копию письма в папку на сервере. Для решения проблемы следует либо правильно настроить сопоставление папок и пароли приложений, либо (что чаще всего является лучшим выходом) использовать протокол SMTP для отправки, минуя проблемный вызов метода через IMAP. В качестве альтернативы можно использовать расширение для отправки и получения почтовых сообщений с вложениями.

← На главную