Как синхронизировать отправленные из 1С письма с локальным почтовым клиентом при работе в терминале?

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

Рассмотрим распространенную архитектурную проблему: пользователи работают в 1С внутри терминальной сессии (RDP), а почтовые клиенты (например, The Bat! или Microsoft Outlook) установлены на их физических рабочих станциях. Когда из 1С выполняется формирование или отправка электронного письма, оно либо отправляется через локальный почтовый профиль терминального сервера, либо уходит напрямую через SMTP. В результате отправленные письма сохраняются в разных местах: переписка с локального компьютера не видит то, что ушло из 1С, и наоборот.

Разберем основные причины такого поведения и проанализируем варианты решения задачи, позволяющие объединить историю переписки в едином интерфейсе.

Причины разделения переписки

Выясним, почему возникает рассинхронизация почтовых баз:

  1. Использование протокола POP3: Если почтовый клиент на локальной рабочей станции настроен по устаревшему протоколу POP3, он просто скачивает входящие письма с сервера в локальную базу данных. Протокол POP3 принципиально не поддерживает синхронизацию структуры папок и содержимого папки «Отправленные» с сервером.
  2. Специфика протокола SMTP: При прямой отправке сообщений средствами 1С через протокол SMTP письмо доставляется на сервер для передачи получателю, но сам по себе протокол SMTP не выполняет сохранение копии в почтовом ящике отправителя, если это явно не предусмотрено почтовым сервером.
  3. Разделение профилей MAPI: При вызове внешнего почтового клиента через MAPI из терминала задействуется профиль пользователя на терминальном сервере, база которого изолирована от локального компьютера.

Способ 1. Переход на протокол IMAP и синхронизация с сервером

Самым надежным и правильным способом является отказ от POP3 в пользу протокола IMAP на рабочих станциях пользователей. Протокол IMAP хранит всю структуру каталогов (включая папку «Отправленные») непосредственно на сервере.

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

  1. Включение сохранения на почтовом сервере: Большинство почтовых серверов имеют настройку «Автоматически сохранять копии писем, отправленных по SMTP, в папку "Отправленные"». Если включить эту опцию, то при отправке из 1С через стандартный объект ИнтернетПочта сервер сам положит копию в нужную папку, а локальный почтовый клиент (The Bat! или Outlook) скачает ее по IMAP.
  2. Программное сохранение в папку IMAP средствами 1С: Если сервер не сохраняет копию автоматически, 1С после отправки через SMTP может подключиться к серверу по протоколу IMAP и сохранить сформированное сообщение в папку исходящих.

Посмотрим на пример отправки письма через объект ИнтернетПочта:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.example.com";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "user@example.com";
Профиль.ПарольSMTP = "ПарольПриложения";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
Профиль.ИспользоватьSSLSMTP = Истина;

Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.ИмяОтправителя = "Учетная система 1С";
Письмо.Отправитель.Адрес = "user@example.com";
Письмо.Тема = "Счет на оплату";
Письмо.Получатели.Добавить("client@example.com");

Текст = Письмо.Тексты.Добавить("Добрый день! Во вложении счет.");
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;

Почта = Новый ИнтернетПочта;
Попытка
    Почта.Подключиться(Профиль, ПротоколИнтернетПочты.SMTP);
    Почта.Послать(Письмо);
    Почта.Отключиться();
Исключение
    Почта.Отключиться();
    ВызватьИсключение;
КонецПопытки;

Способ 2. Отправка копии письма пользователю (CC / BCC)

Если нет возможности перенастроить почтовые клиенты или изменить серверные параметры, разберем обходное программное решение: при отправке письма из 1С автоматически добавлять адрес самого пользователя в список скрытых копий (СкрытыеКопии) или обычных получателей.

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

Посмотрим, как добавить скрытую копию в коде 1С:


// Добавление основного получателя
Письмо.Получатели.Добавить("client@example.com");

// Добавление адреса отправителя в скрытую копию для синхронизации
Письмо.СкрытыеКопии.Добавить("user@example.com");

Способ 3. Перенос почтового клиента на терминальный сервер

Проанализируем административный вариант: если пользователи работают в 1С преимущественно в терминальном режиме, имеет смысл полностью перенести почтовый клиент (например, The Bat! или Outlook) на терминальный сервер. В этом случае пользователь работает с почтой и 1С в едином окружении, а интеграция по MAPI или COM работает прозрачно в рамках одной пользовательской сессии.

Ограничения и важные нюансы

При реализации интеграции обратим внимание на следующие технические ограничения:

  1. Разрядность платформ: Если используется взаимодействие через COM-объекты или MAPI, разрядность клиента 1С:Предприятие (32 или 64 бит) должна строго совпадать с разрядностью установленного почтового клиента.
  2. Авторизация почтовых сервисов: При прямой отправке через ИнтернетПочтовыйПрофиль современные почтовые сервисы требуют использования специальных «паролей приложений» или протокола OAuth 2.0 вместо обычного пароля от учетной записи.
← На главную