IMAP文件夹/消息同步策略?

时间:2009-03-02 17:07:43

标签: email synchronization imap

我即将 IMAP电子邮件集成添加到我们的某个Web应用程序(ASP.NET / SQL Server)中。我已经使用commercial library公开了最重要的IMAP功能:获取文件夹列表,获取邮件标题,获取mime消息等。)

从IMAP服务器“实时”获取电子邮件数据非常有效。但是这里遇到了一个艰巨的任务:我必须保持电子邮件/文件夹缓存SQL数据库同步到IMAP服务器(我必须显示应用不同标准的数据)。

我们的数据库架构基本上包含“文件夹”和“电子邮件”表。 “电子邮件”表主要包含标题信息,如“FromAddress”,“FromName”,“IsRead”,“IsAnswered”,“IsForwarded”,“HasAttachments”等(没有电子邮件内容或附件)

我必须考虑两个主要方案:

  1. 第一次获取所有邮件(或在用户重新组织文件夹后)
  2. 获取新消息/最近消息
  3. 考虑到性能是一个主要的设计标准,保持邮件服务器和数据库服务器保持最新状态的良好同步策略是什么(我不能每次连接时查询/比较数千条消息,以确定用户是否移动或删除了一些旧电子邮件。)

    谢谢!

1 个答案:

答案 0 :(得分:2)

从您图书馆的功能列表:

  

更好的UniqueId支持:我们已添加   请求更多的选项   消息的唯一ID。你现在可以   在消息中返回UniqueId   DataTable用于返回IMAP   服务器

  
      
  • 仅检索新消息
  •   
  • 搜索已标记的消息
  •   
  • 标记/取消标记为已阅读的邮件
  •   

在我看来,好像您的库具有保持SQL Server同步所需的所有支持。您可以以编程方式将消息标记为已读,并且库仅支持检索新消息。这照顾你的第二个项目。

您的策略部分取决于您的解决方案的运作方式。如果我读了你的问题,你的用户在IMAP服务器上管理他们的电子邮件,并且你的SQL Server从同步角度“订阅”到IMAP服务器。

如果这是正确的,那么同步实际上是后台任务。我的方法是在逐个用户的基础上使用事件模型进行同步。如果可能,当有用户的活动(新的/删除的电子邮件)时“通知”同步程序。将同步“作业”添加到将同步作业一起批处理的后台进程。通知模型将确保同步程序仅适用于需要同步的用户。

小的新/已删除的电子邮件同步作业转到一个“处理器”,较大的重新同步和文件夹重组等较大的作业转到另一个。为了保持整体吞吐量较高,可能需要拆分非常大的重新同步工作。 “小工作”和“大工作”处理器可能是两种不同的服务,或者可能是两种不同的线程,具体取决于性能和设计考虑因素。

相关问题