Из списка функций вашей библиотеки:
Лучшая поддержка UniqueId: мы добавили
еще больше вариантов для запроса
уникальный идентификатор сообщения. Ты можешь сейчас
вернуть уникальный идентификатор в сообщении
DataTable для обратных поездок в IMAP
сервер.
И
- Получать только новые сообщения
- Поиск помеченных сообщений
- Пометить / снять пометку как прочитанное
Мне кажется, что ваша библиотека имеет всю необходимую поддержку для синхронизации вашего сервера SQL. Вы можете программно помечать сообщения как прочитанные, а библиотека поддерживает поиск только новых сообщений. Это позаботится о вашем втором предмете.
Ваша стратегия будет частично зависеть от того, как работает ваше решение. Если я прочитаю правильность вашего вопроса, ваши пользователи будут управлять своей электронной почтой на сервере IMAP, а ваш SQL-сервер будет «подписан» на сервер IMAP с точки зрения синхронизации.
Если это правильно, то синхронизация фактически является фоновой задачей. Мой подход заключается в синхронизации с использованием модели событий для каждого пользователя. Если возможно, «уведомите» программу синхронизации о наличии активности (новых / удаленных электронных писем) для пользователя. Добавьте «задание» синхронизации в фоновый процесс, который объединяет задания синхронизации. Модель уведомлений гарантирует, что программа синхронизации работает только с пользователями, которым требуется синхронизация.
Небольшие новые / удаленные задания синхронизации электронной почты переходят на один «процессор», а более крупные задания, такие как полная повторная синхронизация и реорганизация папок, переходят к другому. Для поддержания высокой пропускной способности может потребоваться разделение действительно больших заданий на повторную синхронизацию. Процессоры «небольшая работа» и «большая работа» могут представлять собой две разные службы или, возможно, два разных потока в зависимости от производительности и особенностей проектирования.