Почему 1С не получает некоторые письма из Gmail, если почтовый ящик используется в другой программе?

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

Часто возникает ситуация, когда в типовой конфигурации 1С настроен почтовый клиент для работы с Gmail, но система загружает не все письма. При этом в другой почтовой программе, например, The Bat! или Outlook, все недостающие письма видны во входящих. Давайте разберем, почему так происходит и как исправить эту проблему.

Проанализируем ситуацию. Вы видите, что письма на сервере есть, но при отладке в 1С массив писем, полученный от сервера, оказывается пустым. Однако, если отправить тестовое письмо, оно успешно приходит. Это указывает не на проблему с подключением или авторизацией, а на логику отбора писем с сервера.

Причина проблемы: конфликт почтовых клиентов при использовании протокола POP3

Основная причина такого поведения кроется в особенностях работы протокола POP3 и его использовании несколькими программами одновременно.

Протокол POP3 изначально создавался для сценария, когда один почтовый клиент подключается к ящику, скачивает все новые письма на локальный компьютер и, как правило, удаляет их с сервера. Современные клиенты могут не удалять письма, а просто помечать их как прочитанные.

По умолчанию, встроенный почтовый клиент 1С настроен на получение только новых, непрочитанных сообщений. Что же происходит в нашем случае:

  1. Почтовый клиент The Bat! (или любой другой) подключается к ящику Gmail.
  2. Он скачивает заголовки или сами письма и помечает их на сервере как «прочитанные».
  3. Следом к этому же ящику подключается 1С.
  4. 1С запрашивает у сервера непрочитанные письма.
  5. Сервер отвечает, что новых (непрочитанных) писем нет, так как The Bat! их уже "обработал".

В итоге 1С просто не видит эти письма, потому что для нее они уже не являются новыми. Именно поэтому тестовое письмо, отправленное после проверки, успешно загружается — его еще не успел "перехватить" другой клиент.

Рассмотрим несколько способов решения этой задачи.

Решение 1: Настройка 1С на получение прочитанных писем

Самый правильный способ — изменить логику в 1С так, чтобы она забирала с сервера все письма, а не только непрочитанные. Для этого нужно модифицировать параметры методов работы с интернет-почтой.

В типовых конфигурациях получение почты обычно происходит через методы ПолучитьЗаголовки() или ПолучитьИдентификаторы(), а затем Выбрать(). Нам нужно повлиять на первый этап — получение списка писем.

Метод ПолучитьЗаголовки() может принимать в качестве параметра структуру отбора, где можно указать, какие именно письма мы хотим получить. Чтобы получить все сообщения, включая прочитанные, необходимо явно указать это в отборе.

Посмотрим на пример кода:

Если в вашем коде используется вызов без параметров, как в сообщении на форуме:


// Такой код получит только НЕПРОЧИТАННЫЕ письма по умолчанию
МассивЗаголовоков = ИнтернетПочта.ПолучитьЗаголовки();

Его необходимо изменить, добавив структуру отбора:


// Создаем структуру для отбора сообщений
ОтборПисем = Новый Структура;

// Указываем, что нужно получать и прочитанные письма
ОтборПисем.Вставить("Прочитанные", Истина); 
// По умолчанию флаг "Непрочитанные" уже стоит в Истина, но для надежности можно указать и его
ОтборПисем.Вставить("Непрочитанные", Истина);

// Получаем заголовки всех писем, удовлетворяющих отбору
МассивЗаголовоков = ИнтернетПочта.ПолучитьЗаголовки(ОтборПисем);

// Дальнейший цикл обработки остается без изменений
Для Каждого Заголовок Из МассивЗаголовоков Цикл
    // Получаем полное сообщение по его идентификатору, не удаляя с сервера
    Сообщение = ИнтернетПочта.Выбрать(Ложь, Заголовок.Идентификатор);
    
    // ... ваш код обработки письма ...
КонецЦикла;

После такого изменения 1С будет запрашивать у сервера Gmail и прочитанные, и непрочитанные письма, и проблема с "пропажей" сообщений будет решена. Вам потребуется найти соответствующий участок кода в вашей конфигурации (например, в общем модуле, отвечающем за работу с почтой, или в регламентном задании) и внести это небольшое изменение.

Решение 2: Изменение настроек второго почтового клиента

Если вносить изменения в код конфигурации 1С нежелательно (например, чтобы не усложнять будущие обновления), можно пойти другим путем — настроить второй почтовый клиент (в нашем примере The Bat!).

Необходимо найти в его настройках опции, отвечающие за управление сообщениями на сервере, и сделать так, чтобы он не изменял статус писем. Обычно эти настройки находятся в свойствах почтового ящика, в разделе «Управление почтой» или «Дополнительно».

Вам нужно найти и настроить следующие параметры:

В этом случае The Bat! будет работать в режиме "только для чтения", а 1С будет основным клиентом, который управляет статусом писем. Этот способ проще, но менее надежен, так как зависит от настроек сторонней программы.

Рекомендация: Переход на протокол IMAP

Описанная проблема — это фундаментальное ограничение протокола POP3. Для сценариев, когда с одним почтовым ящиком работают несколько устройств или программ, был разработан более современный протокол — IMAP.

Ключевое отличие IMAP в том, что он синхронизирует состояние почтового ящика между всеми клиентами. Если вы прочитаете письмо в The Bat!, оно тут же будет отмечено как прочитанное и в 1С, и в веб-интерфейсе Gmail, и на смартфоне. Все клиенты видят одну и ту же картину.

Преимущества IMAP:

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

Важные моменты при работе с Gmail

При настройке интеграции с Gmail стоит помнить о его повышенных требованиях к безопасности:

  1. Пароли приложений (App Passwords). Если в вашем аккаунте Google включена двухфакторная аутентификация, вы не сможете использовать свой обычный пароль для подключения из 1С. Вам необходимо сгенерировать специальный "пароль приложения" в настройках безопасности аккаунта Google и использовать его в настройках учетной записи 1С.
  2. Включение доступа. Убедитесь, что в настройках самого ящика Gmail (в разделе «Пересылка и POP/IMAP») доступ по нужному протоколу включен для всех писем, а не только для тех, что получены с момента включения настройки.

Таким образом, проблема "невидимых" писем в 1С — это не ошибка, а логичное следствие совместной работы нескольких программ по устаревшему протоколу POP3. Выбрав один из предложенных методов, вы сможете обеспечить стабильное получение всей почты.

← На главную