Рассмотрим распространенную архитектурную проблему: пользователи работают в 1С внутри терминальной сессии (RDP), а почтовые клиенты (например, The Bat! или Microsoft Outlook) установлены на их физических рабочих станциях. Когда из 1С выполняется формирование или отправка электронного письма, оно либо отправляется через локальный почтовый профиль терминального сервера, либо уходит напрямую через SMTP. В результате отправленные письма сохраняются в разных местах: переписка с локального компьютера не видит то, что ушло из 1С, и наоборот.
Разберем основные причины такого поведения и проанализируем варианты решения задачи, позволяющие объединить историю переписки в едином интерфейсе.
Выясним, почему возникает рассинхронизация почтовых баз:
POP3, он просто скачивает входящие письма с сервера в локальную базу данных. Протокол POP3 принципиально не поддерживает синхронизацию структуры папок и содержимого папки «Отправленные» с сервером.SMTP письмо доставляется на сервер для передачи получателю, но сам по себе протокол SMTP не выполняет сохранение копии в почтовом ящике отправителя, если это явно не предусмотрено почтовым сервером.Самым надежным и правильным способом является отказ от POP3 в пользу протокола IMAP на рабочих станциях пользователей. Протокол IMAP хранит всю структуру каталогов (включая папку «Отправленные») непосредственно на сервере.
Чтобы отправленные из 1С письма попадали в общую историю, можно использовать несколько подходов:
ИнтернетПочта сервер сам положит копию в нужную папку, а локальный почтовый клиент (The Bat! или Outlook) скачает ее по IMAP.Посмотрим на пример отправки письма через объект ИнтернетПочта:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.example.com";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "user@example.com";
Профиль.ПарольSMTP = "ПарольПриложения";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
Профиль.ИспользоватьSSLSMTP = Истина;
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.ИмяОтправителя = "Учетная система 1С";
Письмо.Отправитель.Адрес = "user@example.com";
Письмо.Тема = "Счет на оплату";
Письмо.Получатели.Добавить("client@example.com");
Текст = Письмо.Тексты.Добавить("Добрый день! Во вложении счет.");
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль, ПротоколИнтернетПочты.SMTP);
Почта.Послать(Письмо);
Почта.Отключиться();
Исключение
Почта.Отключиться();
ВызватьИсключение;
КонецПопытки;
Если нет возможности перенастроить почтовые клиенты или изменить серверные параметры, разберем обходное программное решение: при отправке письма из 1С автоматически добавлять адрес самого пользователя в список скрытых копий (СкрытыеКопии) или обычных получателей.
В этом случае письмо приходит во входящие пользователя на локальный компьютер, и почтовый клиент помещает его во входящую почту. При использовании правил фильтрации в The Bat! или Outlook такое письмо можно автоматически перемещать в папку «Отправленные» или отдельную папку «Отправлено из 1С». Это гарантирует, что цепочка переписки не прервется.
Посмотрим, как добавить скрытую копию в коде 1С:
// Добавление основного получателя
Письмо.Получатели.Добавить("client@example.com");
// Добавление адреса отправителя в скрытую копию для синхронизации
Письмо.СкрытыеКопии.Добавить("user@example.com");
Проанализируем административный вариант: если пользователи работают в 1С преимущественно в терминальном режиме, имеет смысл полностью перенести почтовый клиент (например, The Bat! или Outlook) на терминальный сервер. В этом случае пользователь работает с почтой и 1С в едином окружении, а интеграция по MAPI или COM работает прозрачно в рамках одной пользовательской сессии.
При реализации интеграции обратим внимание на следующие технические ограничения:
ИнтернетПочтовыйПрофиль современные почтовые сервисы требуют использования специальных «паролей приложений» или протокола OAuth 2.0 вместо обычного пароля от учетной записи.