IMAP 文件夹/消息同步策略?
Posted
技术标签:
【中文标题】IMAP 文件夹/消息同步策略?【英文标题】:IMAP folder/messages synchronization strategy? 【发布时间】:2010-10-10 19:50:48 【问题描述】:我即将将 IMAP 电子邮件集成添加到我们的一个 Web 应用程序(ASP.NET / SQL Server)。我已经在使用commercial library,它公开了最重要的 IMAP 功能:获取文件夹列表、获取邮件标题、获取 mime 消息等)
从 IMAP 服务器“实时”获取电子邮件数据效果很好。但困难的任务来了:我必须保持电子邮件/文件夹缓存 SQL 数据库与 IMAP 服务器同步(我必须显示应用不同标准的数据)。
我们的数据库架构本质上包含一个“文件夹”和一个“电子邮件”表。 “电子邮件”表主要包含标题信息,如“FromAddress”、“FromName”、“IsRead”、“IsAnswered”、“IsForwarded”、“HasAttachments”等(没有电子邮件内容或附件) .
我必须考虑两个主要场景:
-
第一次(或在用户重新组织文件夹后)获取所有消息
获取新消息/最近消息
考虑到性能是主要的设计标准(我不能每次连接时都查询/比较数千条消息,在以查明用户是否移动或删除了一些旧电子邮件)。
谢谢!
【问题讨论】:
【参考方案1】:来自您图书馆的功能列表:
更好的 UniqueId 支持:我们添加了 请求的更多选项 消息的唯一 ID。您现在可以 返回消息中的 UniqueId 用于返回 IMAP 的数据表 服务器。
还有:
仅检索新消息 搜索标记的消息 将消息标记/取消标记为已读
在我看来,您的库似乎拥有保持 SQL 服务器同步所需的所有支持。您可以以编程方式将消息标记为已读,并且该库支持仅检索新消息。这会处理您的第二个项目。
您的策略将部分取决于您的解决方案的运作方式。如果我正确地阅读了您的问题,则从同步的角度来看,您的用户在 IMAP 服务器上管理他们的电子邮件,并且您的 SQL Server 已“订阅”到 IMAP 服务器。
如果这是正确的,那么同步实际上是一项后台任务。我的方法是在逐个用户的基础上使用事件模型进行同步。如果可能,当用户有活动(新的/删除的电子邮件)时“通知”同步程序。将同步“作业”添加到将同步作业批处理在一起的后台进程。通知模型将确保同步程序仅适用于需要同步的用户。
小型新/已删除电子邮件同步作业转到一个“处理器”,而较大的作业(例如完全重新同步和文件夹重组)转到另一个。为了保持较高的整体吞吐量,可能必须拆分非常大的重新同步作业。 “小型作业”和“大型作业”处理器可能是两个不同的服务,也可能是两个不同的线程,具体取决于性能和设计考虑。
【讨论】:
很好的答案,谢谢。我想我必须重新审视 IMAP 组件/协议的功能。以上是关于IMAP 文件夹/消息同步策略?的主要内容,如果未能解决你的问题,请参考以下文章
AppleScript从Mail.app上的Imap文件夹中选择消息
使用 IMAP 发送邮件:如何检测邮件已从一个文件夹移动到另一个文件夹?