Стратегия синхронизации папки IMAP / сообщений?

StackOverflow https://stackoverflow.com/questions/603106

  •  03-07-2019
  •  | 
  •  

Вопрос

Я собираюсь добавить Интеграция с электронной почтой IMAP в одно из наших веб-приложений (ASP.NET / SQL Server).Я уже использую коммерческая библиотека который предоставляет наиболее важную функциональность IMAP:получить список папок, получить заголовки сообщений, получить mime-сообщение и т.д.)

Получение данных электронной почты "в реальном времени" с сервера IMAP работает очень хорошо.Но тут возникает трудная задача:Я должен сохранить электронную почту / папки кэширование базы данных SQL, синхронизированной с сервером IMAP (Я должен показать данные, применяющие разные критерии).

Наша схема базы данных по существу содержит таблицу "Папки" и "Электронные письма".Таблица "Электронные письма" содержит в основном информацию заголовка, такую как "FromAddress", "FromName", "isRead", "IsAnswered", "IsForwarded", "HasAttachments" и т.д.(без содержимое электронной почты или вложения).

Я должен рассмотреть два основных сценария:

  1. Получение всех сообщений с первого раза (или после того, как пользователь переорганизовал папки)
  2. Получение новых / недавних сообщений

Какова была бы хорошая стратегия синхронизации для поддержания почтового сервера и сервера баз данных в актуальном состоянии, учитывая, что производительность является основным критерием дизайна (я не могу просто запрашивать / сравнивать тысячи сообщений каждый раз, когда я подключаюсь, чтобы узнать, переместил ли пользователь или удалил некоторые старые электронные письма).

Спасибо!

Это было полезно?

Решение

Из списка функций вашей библиотеки:

Улучшенная поддержка UniqueID:Мы добавили еще больше опций для запроса уникального идентификатора сообщения.Теперь вы можете возвращать уникальный идентификатор в сообщении DataTable для обратной отправки на сервер IMAP .

И:

  • Извлекать только Новые сообщения
  • Поиск помеченных сообщений
  • Помечать / Снимать Пометки с Сообщений как Прочитанные

Мне кажется, что ваша библиотека обладает всей необходимой поддержкой для синхронизации вашего SQL server.Вы можете программно помечать сообщения как прочитанные, и библиотека поддерживает извлечение только новых сообщений.Это позаботится о вашем втором предмете.

Ваша стратегия будет частично зависеть от того, как работает ваше решение.Если я правильно прочитал ваш вопрос, ваши пользователи управляют своей электронной почтой на сервере IMAP, а ваш SQL Server "подписан" на сервер IMAP с точки зрения синхронизации.

Если это верно, то синхронизация фактически является фоновой задачей.Мой подход заключался бы в синхронизации с использованием модели событий для каждого пользователя.Если возможно, "уведомляйте" программу синхронизации о появлении активности (новых/ удаленных электронных писем) пользователя.Добавьте "задание" синхронизации к фоновому процессу, который выполняет пакетную синхронизацию заданий вместе.Модель уведомлений гарантирует, что программа синхронизации работает только с пользователями, которым требуется синхронизация.

Небольшие задания синхронизации новых / удаленных сообщений электронной почты передаются одному "процессору", а более крупные задания, такие как полная повторная синхронизация и реорганизация папок, передаются другому.Возможно, придется разделить действительно большие задания по повторной синхронизации, чтобы сохранить общую пропускную способность на высоком уровне.Процессоры "small job" и "big job" могут быть двумя разными службами или, возможно, двумя разными потоками в зависимости от производительности и конструктивных соображений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top