2009-03-02 111 views
3

我即將將IMAP電子郵件整合添加到我們的一個Web應用程序(ASP.NET/SQL Server)中。我已經在使用一個commercial library,其中顯示了最重要的IMAP功能:獲取文件夾列表,獲取郵件標題,獲取MIME消息等。)IMAP文件夾/消息同步策略?

從IMAP服務器獲取電子郵件數據「實時」效果很好。但是這裏有一個困難的任務:我必須保持電子郵件/文件夾緩存SQL數據庫同步到IMAP服務器(我必須顯示數據應用不同的標準)。

我們的數據庫模式基本上包含一個「文件夾」和一個「電子郵件」表。 「電子郵件」表主要包含諸如「FromAddress」,「FromName」,「IsRead」,「IsAnswered」,「IsForwarded」,「HasAttachments」等標題信息(沒有電子郵件內容或附件)。

我要考慮兩個主要場景:

  1. 獲得的所有消息在第一時間(或在用戶重新組織文件夾)
  2. 獲得新/最近的消息

什麼將保持郵件服務器和數據庫服務器保持最新,這是一個很好的同步策略,考慮到性能是一個主要的設計標準(我不能每次連接時都要查詢/比較數千條消息,以便發現如果用戶移動或刪除那麼我的舊電子郵件)。

謝謝!

回答

2

從資料庫中的功能列表:

更好的唯一ID的支持:我們增加了 甚至更​​多的選項請求 消息的唯一ID。您現在可以在消息的 DataTable中返回UniqueId以返回到IMAP 服務器。

和:

  • 只檢索新郵件
  • 搜索標記的消息
  • 標記/取消的消息爲已讀

在我看來,彷彿你庫有你需要保持你的SQL服務的所有支持版本同步。您可以通過編程將消息標記爲已讀,並且庫僅支持檢索新消息。這照顧你的第二個項目。

您的策略將部分取決於您的解決方案如何工作。如果我讀取您的問題correclty,您的用戶在IMAP服務器上管理他們的電子郵件,並從同步角度將您的SQL Server「訂閱」到IMAP服務器。

如果這是正確的,那麼同步實際上是一個後臺任務。我的方法是在每個用戶的基礎上使用事件模型進行同步。如果可能,當用戶有活動(新/刪除的電子郵件)時,「通知」同步程序。將同步「作業」添加到批量同步作業的後臺進程。通知模式將確保同步程序僅適用於需要同步的用戶。

小的新/刪除的電子郵件同步作業轉到一個「處理器」,更大的作業如總重新同步和文件夾重組轉到另一個。爲了保持高吞吐量,真正的大型重新同步作業可能不得不分開。根據性能和設計考慮,「小型工作」和「大型工作」處理器可能是兩種不同的服務,或者可能是兩種不同的線程。

+0

很好的答案,謝謝。我想我必須重新訪問IMAP組件/協議的功能。 – splattne 2009-03-03 07:40:56