IMAP服务器立面 - 如何制作



我已经实现了自定义的电子邮件服务器和Web客户端。该服务器只是使用第三方(SendGrid(发送和接收的REST API(类似于Google的Gmail API(。电子邮件存储在数据库中。Web客户端只是与REST客户端进行交谈以发送和接收。

这种方法的问题是它在任何地方都无法实现IMAP,这使得标准客户端(Outlook,iPhone等(无法连接并使用我们的电子邮件API。这限制了客户仅将我们的客户用于电子邮件。

我需要的是某种IMAP服务器"立面",该服务器将管理与客户的连接,并与我的REST API拨打联系以实际处理请求(获取电子邮件,发送电子邮件等(。

如何实现IMAP立面?是否有一种方法可以采用现有邮件服务器并将其挖掘并指出所有"事件"来拨打我的API?

tl:dr;在Perl中写下您的网关;使用net :: imap ::服务器;Override net :: imap :: server ::邮箱;并使用众多PERL REST客户端中的一个与您的服务器交谈。

perl是在维持合理数量的代码安全的同时,快速进行此操作的最佳选择。您需要两个Perl模块。第一个是net :: imap ::服务器,这是该模块的GitHub存储库。这是符合标准的RFC 3501服务器,故意设计为具有可配置的邮件商店。您将覆盖默认网络:: imap :: server ::邮箱实现与您自己的代码,该代码与您的自定义电子邮件后端进行对话。

对于第二个模块,选择您喜欢的Perl模块用于与REST服务器交谈。您的选择取决于您想在其余消息的构造和交付中拥有多少细粒度控制。

幸运的是,在这里您有很多选择。一种可能性是Eixo :: Rest,它在这里有一个GitHub存储库。Eixo :: Rest似乎很好地处理异步与同步REST API调用,但对X509密钥管理的控制并不能提供很多控制。根据API的Googley的不同,还有其余的:: Google模块。有趣的是,这个家庭还具有REST :: Google :: Apps :: EmailSettings模块,专门用于设置诸如标签和语言之类的Gmail特定于时髦。最后,其余::消费者模块似乎封装了许多https特定的内容,例如超时和身份验证作为perl对象实例化的参数。

如果您使用这些现有框架,则应该为您完成约90%的必要代码。

不要通过黑客攻击Dovecot或C 编写的任何其他邮件服务器来做到这一点。如果您使用编译语言快速攻击邮件服务器,则您的服务器迟早会体验到缓冲区溢出和堆叠粉碎的所有乐趣以及Internet所做的所有其他事情都可以通过邮件服务器操纵。首先使其安全工作,然后稍后进行优化。

(这基本上是我的评论,但要详细介绍得更多。(

某些IMAP服务器(最著名的是Dovecot(是结构化的,因此文件访问位于具有定义接口的单独模块中。Dovecot并不是唯一的一个,但它是迄今为止最受欢迎的,其后端界面是合适的,所以我会考虑没有特定的问题。

已经存在非文件模块,例如IMAPC,证明可以完成。当客户端打开由IMAPC支持的邮箱时,DOVECOT解析IMAP命令,在IMAPC中调用消息访问功能,IMAPC发出新的IMAP命令,解析服务器响应,将C结构返回Dovecot,Dovecot,Dovecot fashions new IMAP响应,并将其返回给客户端。

我建议您采用Dovecot源,查看SRC/Lib-Storage/inbox/index/imapc以及该目录中的其他后端,并实现将您的REST API作为客户端说的。

<。

由于您熟悉.NET,我建议您将以下任何一个IMAPV4服务器的实现用于您的喜好:

  • Lumisoft Mail Server-确实是一个非常旧的项目(让我们称其为"成熟",是吗?(。不要太过十年的网站,并且缺少GitHub链接 - 该消息来源是在"其他下载"下提供的。
  • McNNTP-也是一个较旧的项目,并且主要关注NNTP(如名称所述(,但非常接近您在IMAP组件方面要实现的目标。看看,您可能会发现这是一个很好的起点。

最新更新