В процессе эксплуатации 1С:ERP (и других типовых конфигураций на платформе 8.3) системные администраторы и разработчики часто сталкиваются с ситуацией, когда почтовый ящик, настроенный по протоколу IMAP, внезапно перестает загружать входящие письма. При этом отправка может работать корректно, а в сторонних клиентах (например, Outlook) письма видны. Рассмотрим детально, почему это происходит, как работает механизм подписок 1С и как программно гарантировать получение почтовых сообщений средствами 1С.
Проблема кроется в технической реализации работы с протоколом IMAP в платформе 1С. Когда конфигурация пытается получить список папок для загрузки писем, она использует встроенные методы встроенного языка. В типовом коде ERP часто встречается следующая логика:
ПолучитьПочтовыеЯщикиПоПодписке().INBOX) отсутствует в этом списке, письма из неё загружаться не будут.Проанализируем ситуацию: метод ПолучитьПочтовыеЯщикиПоПодписке() соответствует команде протокола IMAP LSUB (List Subscribed). В отличие от команды LIST, которая возвращает все папки на сервере, LSUB возвращает только те, на которые клиент явно «подписался». Если кто-то из пользователей, имеющих доступ к общему ящику, случайно или намеренно отменил подписку на папку «Входящие» в своем Outlook или другом клиенте, это состояние сохранится на сервере Microsoft Exchange, и робот 1С перестанет видеть входящую почту.
Для понимания взаимодействия 1С и почтового сервера важно знать соответствие методов платформы и команд протокола:
ПолучитьПочтовыеЯщики()) — возвращает полный список всех доступных папок в почтовом ящике.ПолучитьПочтовыеЯщикиПоПодписке()) — возвращает только «активированные» или подписанные папки.ПодписатьсяНаПочтовыйЯщик()) — помечает папку на сервере как активную для текущей учетной записи.ОтменитьПодпискуНаПочтовыйЯщик()) — исключает папку из списка активных подписок.Важный нюанс Microsoft Exchange заключается в том, что состояние подписок хранится на стороне сервера. Если несколько клиентов (Outlook у разных сотрудников и 1С) используют одни и те же учетные данные, действие одного пользователя в Outlook мгновенно влияет на то, что увидит 1С при вызове LSUB.
Если вы обнаружили, что 1С не видит папку «Входящие», проанализируем настройки через Outlook:
После этого 1С при следующем сеансе получения почты снова увидит папку через ПолучитьПочтовыеЯщикиПоПодписке().
Полагаться на ручную настройку подписок ненадежно, особенно для критически важных бизнес-процессов. Рассмотрим, как изменить код загрузки почты, чтобы сделать его отказоустойчивым. Мы можем принудительно проверять наличие папки INBOX в подписках и, если её там нет, подписываться программно.
Пример реализации проверки и подписки:
Профиль = Новый ИнтернетПочтовыйПрофиль;
// Настройка параметров профиля (сервер, порт, логин, пароль...)
// ...
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);
// Получаем список папок, на которые есть подписка
ПапкиПодписки = Почта.ПолучитьПочтовыеЯщикиПоПодписке();
НужнаяПапкаНайдена = Ложь;
Для Каждого Папка Из ПапкиПодписки Цикл
Если ВРег(Папка.Имя) = "INBOX" ИЛИ ВРег(Папка.Имя) = "ВХОДЯЩИЕ" Тогда
НужнаяПапкаНайдена = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
// Если по подписке папка не найдена, пробуем найти её в общем списке и подписаться
Если Не НужнаяПапкаНайдена Тогда
ВсеПапки = Почта.ПолучитьПочтовыеЯщики();
Для Каждого Папка Из ВсеПапки Цикл
Если ВРег(Папка.Имя) = "INBOX" Тогда
Почта.ПодписатьсяНаПочтовыйЯщик("INBOX");
НужнаяПапкаНайдена = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НужнаяПапкаНайдена Тогда
// Продолжаем стандартный алгоритм получения писем из папки INBOX
КонецЕсли;
Почта.Отключиться();
Исключение
// Обработка ошибок подключения
КонецПопытки;
Разберем еще один важный момент, упомянутый пользователями: почему после загрузки в 1С письма пропадают из Outlook? В конфигурациях 1С:ERP, КА и УТ существует настройка «Удалять письма с сервера после получения». Несмотря на то, что это чаще ассоциируется с протоколом POP3, для IMAP 1С реализует это следующим образом:
\Deleted.EXPUNGE, которая физически удаляет все помеченные письма из папки.Поскольку IMAP — это протокол синхронизации, удаление письма через 1С приводит к его мгновенному исчезновению во всех остальных почтовых клиентах. Чтобы этого избежать, убедитесь, что в карточке «Учетная запись электронной почты» (для УТ 11.5 полезно использовать учетные записи почты с отбором по организации) на вкладке «Параметры входящей почты» выключен флаг удаления писем с сервера.
Чтобы минимизировать риск возникновения подобных ситуаций, проанализируем лучшие практики организации почты для 1С:
ПолучитьПочтовыеЯщики(), чтобы видеть полную структуру папок независимо от настроек подписки. Это критично, когда настроена автоматическая рассылка отчётов на электронную почту и важно гарантировать доставку.Таким образом, we выяснили, что «пропадание» папки «Входящие» в 1С — это не ошибка программы, а следствие работы протокола IMAP и хранения состояния подписок на стороне сервера Exchange. Использование программной проверки подписки или переход на прямую работу со списком всех ящиков полностью решает данную проблему.