我要加入 IMAP集成电子邮件 我们的网络应用程序(ASP.NET /SQL服务器)。我已经使用 商业图书馆 它暴露了最重要的IMAP功能:获得文件夹中列出、获取信息头,得到mime消息等)。

获得电子邮件数据"现场"从IMAP server工作得很好。但这里来的困难任务:我必须保持电子邮件和文件夹 缓存SQL数据库的同步IMAP server (I必须表明数据应用不同的标准)。

我们的数据库模式基本上包含一个"文件夹"和"电子邮件"表。在"电子邮件"表包含主要标题的信息,如"FromAddress","FromName","international airport","IsAnswered","IsForwarded","HasAttachments"等。(没有 电子邮件内容或附件).

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

  1. 得到所有消息的第一次(或后一个用户重新组织的文件夹)
  2. 获得新的/新消息

什么将是一个良好的同步战略保持邮件服务器和数据库服务器上的日期,考虑到性是一个重要的设计标准(我可不只是查询/比较成千上万的消息,每次我连接,以便找出用户的移动或删除一些旧的电子邮件).

谢谢!

有帮助吗?

解决方案

从图书馆的功能清单:

好UniqueId支持:我们已经加入 甚至更多的选择的请求 消息的独特标识。你现在可以 返回的UniqueId在一个消息的 数据表为返回的旅行IMAP 服务器。

并且:

  • 仅检索新的消息
  • 搜索标记的消息
  • 标记/取消的消息读

在我看来,好像你的图书馆拥有所有你需要的支持,以保持你的SQL服务器同步。你可以编程方式标记的消息,如阅读、图书馆和支持检索的只有新的消息。照顾你的第二个项目。

你的策略,将部分取决于如何解决方案的工作。如果我读了你的问题correclty,你的用户管理他们的电子邮件上的IMAP server和SQL服务器"订购"IMAP server,从一个同步的观点。

如果这是正确的,那么同步的是有效地背景的任务。我的方法将以同步使用一事件模型在一个用户的依据。如果可能的话,"通知"的同步程序时有活动(新/删除的电子邮件)的用户。增加一个同步的"工作"的背景过程中,批处理同步的工作在一起。通知的模式将确保保持同步的程序只适用于用户,需要同步。

小新的/已删除邮件同步的工作转到一个"处理"和较大的工作,如总resynch和文件夹重组转到另一个。真正的大resynch作业可能必须分开,以便保持总吞吐量高。在"小型工作"和"大的工作"的处理器可以是两个不同的服务,或者可能两个不同的视线上的性能和设计的考虑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top