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

Mongodb 如何在couchdb/NoSQL数据存储上实现IMAP服务器?,mongodb,email,couchdb,archive,nosql,Mongodb,Email,Couchdb,Archive,Nosql,总结一下我的目标,我真的只是在寻找一种简单的开源方法,它允许我创建和维护一个/多个远程IMAP电子邮件帐户的备份/归档(最好是noSQL db),并使用简单、低成本的解决方案同步每个用户的电子邮件帐户,该解决方案易于扩展,以高效的方式使用服务器资源,并增加了这样一种能力:每个用户只需使用此存档服务器/设置提供的imap服务器、用户名和密码将新imap帐户添加到其现有电子邮件客户端,即可连接到其中心电子邮件存档 更具体地说: 我一直在寻找某种类型的可扩展开源解决方案,这种解决方案可以在云中运行(因

总结一下我的目标,我真的只是在寻找一种简单的开源方法,它允许我创建和维护一个/多个远程IMAP电子邮件帐户的备份/归档(最好是noSQL db),并使用简单、低成本的解决方案同步每个用户的电子邮件帐户,该解决方案易于扩展,以高效的方式使用服务器资源,并增加了这样一种能力:每个用户只需使用此存档服务器/设置提供的imap服务器、用户名和密码将新imap帐户添加到其现有电子邮件客户端,即可连接到其中心电子邮件存档

更具体地说:

我一直在寻找某种类型的可扩展开源解决方案,这种解决方案可以在云中运行(因此很容易扩展),从而实现以下功能:

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

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

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

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

好的,现在来谈谈我不确定的元素

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

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

是否有人有任何与实现这些目标相关的经验、建议或建议/脚本


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

您想用它实现什么

  • IMAP服务器的备份
  • 电子邮件的网络访问
  • 用户可浏览的电子邮件存档
您是IMAP管理员吗

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

您可以按如下方式使用Ruby on Rails:

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

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

如果您只想备份:

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

注意:

我认为,一般来说,尝试将这些电子邮件存储在单独的数据库中不是一个好主意。你基本上是在规避IMAP的安全模型。如果你只想让用户对他们的电子邮件有一个基于web的视图,就可以使用带有web邮件界面的IMAP客户端。

关于5):
您可能想看看ApacheJames,因为它有许多存储引擎,您可以使用/调整其中的一个。通过这种方式,它可以为数据库提供IMAP接口。当然,它不会与其他服务器同步,您必须使用前面提到的其他方法进行同步。

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

DB!=IMAP服务器。数据库不使用IMAP协议当然我知道couchdb和数据库通常不提供连接vi的功能