如何在couchdb/NoSQL数据存储之上实现IMAP服务器



总结一下我的目标,我真的只是在寻找一个简单的,开源的方法,它允许我创建和维护一个/多个远程IMAP电子邮件帐户的备份/存档(最好是noSQL数据库),并使用一个简单的,低成本的解决方案同步每个单独的用户的电子邮件帐户,很容易扩展。通过这个存档服务器/setup提供的imap服务器、用户名和密码,只需向他现有的电子邮件客户端添加一个新的imap帐户,就可以有效地消耗服务器资源,每个用户都需要能够连接到他的中央电子邮件存档。

更具体地说:

我一直在寻找某种类型的可扩展的开源解决方案,它可以在云中运行(因此很容易扩展),它允许以下内容:

1)允许我指定各种IMAP服务器的登录信息,用于访问这些电子邮件帐户和下载/同步每个帐户内的所有电子邮件(希望包括文件夹/标签)

2)关于用于存储每个帐户的所有电子邮件的数据库,我正在研究可扩展的解决方案,如couchdb或mongodb,这些解决方案可能会维护每个电子邮件的简单索引。此索引将维护每个电子邮件的基本信息,如标题栏,包括:从,到,数据时间戳,主题行,相关文件夹/标签,第一次同步日期时间,最后一次同步日期时间,已读/未读状态,附件数量,附件文件名/大小/类型及其所属的相关imap帐户....)

3)关于所有原始电子邮件(包括其附件)的存储,我认为每个单独的电子邮件应该作为一个具有唯一文件名/message-id的单独文件下载,该文件将在主电子邮件索引中引用,因此所有这些原始电子邮件都可以使用amazon S3存储解决方案进行存储,以实现几乎无限的可扩展性。

到目前为止,我相信有现有的开源解决方案可以使用或定制来实现这些目标…最值得注意的是,"offlineIMAP"似乎提供了所有这些功能+更多功能,但如果您知道其他替代方案,请告诉我。

好的,现在是我不确定的元素…

5)我这里需要的是一种方法来利用任何类型的电子邮件客户端原生支持电子邮件访问通过IMAP连接,现在让我能够连接到我的自定义电子邮件数据库,就好像它是一个常规的IMAP电子邮件服务器。因此,我需要某种类型的连接器,我猜它将imap协议连接到在couchdb上执行的操作(或使用的任何数据存储)。当然,任何标准的iMac功能,如搜索/复制/移动/删除/…也应该是可能的,而检索单个电子邮件的详细信息是通过从Amazon S3存储系统检索关联电子邮件完成的。(我只是假设这种方法最有意义,因为这样做可以减少成本。)

假设我的逻辑和方法在使用couchdb/mongodb在这种方法方面是合理的,在我看来,这种设置确实应该允许我轻松地将其扩展到多个用户,访问档案应该相当快…

有没有人有任何经验,建议或建议/脚本相关的实现这些目标?

对于这种类型的电子邮件存档设置和使用Amazon S3存储实际电子邮件,我能想到的唯一负面影响是用户将无法按关键字搜索其存档的内容(正文)。我想这可以通过简单地向couchdb电子邮件索引添加另一列来解决,该索引可以从电子邮件中提取所有实际消息文本(不包括任何先前回复/转发内容的内容)。

关于:你可能想看看Apache James,它有很多存储引擎,你可以使用/调整其中一个。通过这种方式,它可以为数据库提供一个IMAP接口。当然,它不会从其他服务器同步,你必须使用其他方法已经提到过。

你想用这个完成什么?

    IMAP服务器的
  • 备份?
  • web访问电子邮件?
  • 用户可浏览的电子邮件存档?
  • ……?

您是IMAP管理员吗?

如果没有,你必须非常小心,因为它确实有法律影响复制别人的电子邮件到另一个存储/数据库。

你可以在Rails上使用Ruby:

创建一个Rails应用程序连接到你选择的数据库(例如MongoDB),并使用Ruby的。Net::Imap库连接到Imap服务器,然后读取数据并以所需的格式保存在数据库中。

确保保存消息的所有部分,例如消息id,时间戳和标题。

http://www.ruby-doc.org/stdlib-1.9.2/libdoc/net/imap/rdoc/Net/IMAP.html

如果您只是想要备份:

如果您可以直接访问IMAP服务器的磁盘,可能更好的方法是使用Rsync创建存储电子邮件的磁盘分区的副本(而不必解析所有电子邮件并将它们放入数据库)。

http://en.wikipedia.org/wiki/Rsync

注意:

我认为,在一般情况下,它是不是一个好主意,试图将这些电子邮件存储在一个单独的数据库。你基本上是在绕过IMAP的安全模型。如果您只是想让用户以基于web的方式查看他们的电子邮件,那么可以使用带有web邮件界面的IMAP客户端。

这让我想起了一个在Hadoop HDFS之上实现的GSOC项目。我在这里收集了更多的细节,但我不确定需求是否完全相同。

最新更新