Синхронизация почты с Microsoft Exchange

Сложный

На основе механизма синхронизации Sync Engine в Creatio реализована синхронизация почты. Под синхронизацией почты необходимо понимать синхронизацию почты с Microsoft Exchange, поскольку синхронизация почты с другими почтовыми сервисами не поддерживается. Синхронизация почты выполняется по протоколу EWS (Exchange Web Services). Протокол EWS описан в официальной документации Microsoft. Подробнее о настройке Microsoft Exchange читайте в статье Настроить Microsoft Exchange и Microsoft 365.

Выполнить синхронизацию почты 

Участники письма — это отправитель и получатель письма. Отправитель указывается в адресном поле От (From) письма. Получатель указывается в поле Кому (To). Также получатель может быть указан в полях Копия (CC) и Скрытая копия (BCC).

Действия, которые выполняются при синхронизации почты:

  1. Проверка наличия письма в Creatio.
  2. Синхронизация вложений.

Creatio выполняет синхронизацию ранее несинхронизированных писем. Это связано с тем, что письмо невозможно изменить после его отправки. Синхронизируются письма, которые изменены после даты последней синхронизации почты и не являются черновиками. Creatio не выполняет синхронизацию папок Удаленные (Deleted) и Конфликты (Conflicts).

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

Элементы письма, которые используются для его поиска:

  • Тема.
  • Дата отправки.
  • Тело письма.

Из тела письма удаляется разметка и символы пробела. Для ускорения поиска используется MD5 хэш, который хранится в колонке [MailHash] таблицы [Activity] базы данных.

Проверка наличия письма в Creatio 

Действия, которые выполняются после проверки наличия письма в Creatio:

  • Если письмо отсутствует в Creatio, то создается новое письмо.
  • Если письмо присутствует в Creatio, то актуализируются участники письма.

Участники письма добавляются на деталь Участники (Participants) страницы активности. Это позволяет отображать письмо только у пользователей, которые синхронизировали письмо и являются его участниками.

Действия, которые выполняются при заполнении участников письма:

  1. Добавление новых участников письма.
  2. Актуализация участников письма. Выполняется при изменении перечня участников письма (в том числе, при повторной синхронизации).

Добавление новых участников письма 

Условия добавления новых участников письма:

  • Email-адрес, который указан в поле Email) детали Средства связи (Communication options) на странице контакта, совпадает с email-адресом, который указан в одном из адресных полей письма.
  • Наличие для контакта приложения пользователя, который не является пользователем портала.

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

Актуализация существующих участников письма 

Этапы актуализации существующих участников письма:

  1. Участники, которые не являются пользователями Creatio, удаляются с детали Участники (Participants) страницы активности.
  2. Деталь Участники (Participants) страницы активности заполняется заново.

    • Пользователи Creatio, которые ранее синхронизировали письмо, остаются в участниках письма.
    • Для участников письма, которые не являются пользователями Creatio, создается новый пользователь Creatio. Выполняется единоразово, при первой синхронизации письма с новым участником.

Синхронизация вложений 

Поскольку время на скачивание вложения влияет на время сохранения письма, то вложения синхронизируются после обработки всех писем в конце сессии синхронизации. Для этого в планировщик добавляется отдельное задание на синхронизацию вложений. Вложения письма добавляются на деталь Файлы и примечания (Attachments and notes) страницы активности.

Классы синхронизации почты 

Классы, которые реализуют логику работы синхронизации почты:

  • Класс RemoteProvider, который представлен классом ExchangeEmailSyncProvider. Класс ExchangeEmailSyncProvider — провайдер для работы с внешним хранилищем. Реализует логику по выбору данных из Microsoft Exchange.Подробнее о классе RemoteProvider читайте в статье Механизм синхронизации Sync Engine.
  • Класс RemoteItem, который реализует интерфейс IRemoteItem. Интерфейс предоставляет экземпляр элемента синхронизации (в нашем случае — письмо Microsoft Exchange). Подробнее о классе RemoteItem читайте в статье Механизм синхронизации Sync Engine.

    • EmailMessage — реализует интерфейс IRemoteItem. В свою очередь интерфейс реализует логику заполнения данных в объектах Creatio.
    • ExchangeUtility — утилитные методы, которые предназначены для использования библиотеки EWS API, и методы, которые позволяют загружать вложения писем.
    • ExchangeEmailMessageUtility — утилитные методы, которые предназначены для преобразования справочных значений из полей письма.

Схема иерархии класса RemoteProvider для синхронизации почты представлена на рисунке ниже.

Схема иерархии класса RemoteItem для синхронизации почты представлена на рисунке ниже.

Соответствие свойств класса EmailMessage, который представляет сообщение электронной почты Microsoft Exchange, и полей объектов Creatio содержится в таблице ниже. Класс EmailMessage описан в официальной документации Microsoft.

Соответствие свойств класса EmailMessage и полей объектов Creatio
Свойство класса EmailMessage
Объект Creatio
Поле объекта
Subject
Activity
Title
TextBody
Body
Sender
Sender
ToRecipients
Recipient
CcRecipients
CopyRecipient
BccRecipients
BlindCopyRecipient
DateTimeSent
SendDate
Importance
Priority
DateTimeReceived
DueDate, StartDate
Name
ActivityFile
Name
Content
Data
Content.Length
Size