2009-03-02 2 views
3

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

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

Наша схема базы данных содержит, по существу, таблицу «Папки» и «Электронная почта». В таблице «Электронная почта» содержатся, главным образом, заголовок, например «FromAddress», «FromName», «IsRead», «IsAnswered», «IsForwarded», «HasAttachments» и т. Д. (без содержимого электронной почты или вложений).

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

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

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

Спасибо!

ответ

2

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

Better UniqueID Поддержка: Мы добавили еще больше возможностей для запроса уникального Идентификатора сообщения. Вы можете теперь вернуть UniqueId в данных DataTable для обратных поездок на сервер IMAP .

И:

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

Он смотрит на меня, как будто ваш библиотека имеет всю необходимую поддержку, чтобы поддерживать SQL SER ver синхронизирован. Вы можете программно отмечать сообщения как прочитанные, а библиотека поддерживает поиск только новых сообщений. Это касается вашего второго предмета.

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

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

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

+0

Хороший ответ, спасибо. Я думаю, что мне нужно повторно посетить возможности IMAP-компонента/протокола. – splattne

Смежные вопросы