При работе с почтовыми сообщениями в системе 1С:Предприятие разработчики и системные администраторы часто сталкиваются с загадочной ошибкой: «Произошла ошибка при работе с IMAP, Код ошибки 11. Cannot deliver the message». Эта ситуация кажется парадоксальной, так как проверка учетной записи проходит успешно, но при попытке программной отправки через метод Послать система выдает исключение. В рамках данной статьи мы подробно разберем, почему возникает эта ошибка, что на самом деле делает протокол IMAP в контексте отправки и как правильно настроить систему для стабильной работы.
Для начала проанализируем ситуацию, описанную в исходном коде. В типовых конфигурациях (таких как 1С:Комплексная автоматизация или ERP) часто встречается блок кода, использующий объект ИнтернетПочта. Давайте посмотрим на типовой фрагмент, где возникает сбой:
Если (ПротоколПочты = "IMAP" Или ПротоколПочты = "Все") И ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP Тогда
Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, ПротоколИнтернетПочты.IMAP);
// ... дальнейшая обработка
КонецЕсли;
Многих смущает использование ПротоколИнтернетПочты.IMAP внутри метода Послать. Мы привыкли, что для получения почты используется IMAP или POP3, а для отправки — SMTP. И это абсолютно верно. Однако в логике 1С и многих почтовых серверов метод Послать с параметром IMAP выполняет не саму доставку письма адресату, а команду APPEND.
Рассмотрим подробнее: когда мы вызываем этот метод, 1С пытается «докачать» (записать) тело письма непосредственно в структуру папок на почтовом сервере (обычно в папку «Отправленные» или «Sent»). Это необходимо для того, чтобы письмо, отправленное из программы, синхронизировалось и отображалось в вашем почтовом ящике при просмотре через браузер или мобильный клиент. Ошибка 11 означает, что сервер по какой-то причине отказал в приеме данных именно на этапе записи сообщения в папку через IMAP-сессию.
Проанализируем основные факторы, которые приводят к сообщению «Cannot deliver the message» при работе через IMAP:
Если ваша задача — просто доставить письмо получателю, а хранение копии в папке «Отправленные» на сервере не является критически важным, самым эффективным решением будет использование протокола SMTP. Проанализируем, как это реализовал автор темы:
Вместо вызова метода с параметром ПротоколИнтернетПочты.IMAP, необходимо убедиться, что выполняется ветка кода для SMTP:
// Принудительное использование SMTP для отправки
ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, ПротоколИнтернетПочты.SMTP);
При использовании ПротоколИнтернетПочты.SMTP почтовый сервер берет на себя ответственность за доставку письма конечному адресату. Большинство современных серверов (включая mail.ru) автоматически сохраняют копию письма в папку «Отправленные», если отправка прошла успешно через их SMTP-шлюз, поэтому дублирование команды через IMAP часто бывает избыточным и лишь плодит ошибки.
Рассмотрим по шагам, как проверить настройки в интерфейсе программы (без изменения кода):
smtp.mail.ru, порт 465, с включенным использованием SSL.Если вы используете Mail.ru (как в примере темы), выполните следующие действия:
Войдите в веб-интерфейс почты, перейдите в Настройки — Пароль и безопасность — Пароли для внешних приложений. Создайте новый пароль, назовите его «1С» и используйте именно его в настройках 1С вместо основного пароля от почтового ящика. Это устраняет 90% проблем с авторизацией и выполнением команд APPEND в IMAP.
Важно помнить, что версия 8.3.16.1148 является достаточно старой. В ней могут наблюдаться специфические баги при обработке кириллических имен папок в кодировке UTF-7 Modified (стандарт IMAP). Если сервер возвращает имена папок на русском языке, платформа может некорректно интерпретировать строку, что приведет к ошибке 11. В таком случае рекомендуется либо обновить платформу до актуальной версии (например, 8.3.22+), либо использовать исключительно SMTP-протокол для отправки сообщений, так как он менее чувствителен к структуре папок на сервере.
Резюме: Ошибка 11 «Cannot deliver the message» в контексте IMAP — это сигнал о том, что программа не смогла сохранить копию письма в папку на сервере. Для решения проблемы следует либо правильно настроить сопоставление папок и пароли приложений, либо (что чаще всего является лучшим выходом) использовать протокол SMTP для отправки, минуя проблемный вызов метода через IMAP. В качестве альтернативы можно использовать расширение для отправки и получения почтовых сообщений с вложениями.