在rails中接收电子邮件的最佳实践

时间:2009-08-16 03:53:11

标签: ruby-on-rails ruby email actionmailer

我一直在努力找出在rails应用程序中处理传入电子邮件的最佳方法。我意识到“最佳实践”是非常主观的,所以我首先要说明我的主要关注点是可扩展性和效率。这是一个问题,主要是因为我的使用将涉及处理可能很大的附件。

似乎就在昨天,接受的方法是使用ActionMailer接收电子邮件,但最近我偶然发现了几篇文章说这是低效的,因为它会在每封电子邮件中生成一个新的rails实例(大量可怕)。 / p>

最近,这篇文章引起了我的注意: http://jasonseifer.com/2009/04/24/receving-email-with-rails

该帖子谈到了ActionMailer系统的精简版本,该系统并没有被强制生成整个rails实例,但是评论还谈到了其他几个选项,比如专用的邮件目录(maildir?)和imap / pop检索。

我的问题是:有没有人想过在铁路应用程序(包括附件)中处理传入电子邮件的最佳选择是什么?

5 个答案:

答案 0 :(得分:6)

我维护Fetcher plugin来自我与cron一起使用的IMAP服务器的下载电子邮件。我曾经使用过一个守护进程但是很难继续运行(即使使用monit)因为Ruby会挂起。 Cron对我的工作负载是可以的,但它确实每分钟产生一次Rails进程。

要处理附件,请查看MMS2R库。它有一个很好的界面,可以从电子邮件中获取文件。

我向我推荐的另一种方法是为收到的每条消息启动HTTP帖子。然后,您可以扩展Web层以处理它。

无耻插件你可能想看看Mike Mondragon和我的PeepCode book on receiving email with Ruby

答案 1 :(得分:4)

您可以尝试使用http://cloudmailin.com/

等服务

答案 2 :(得分:2)

为了通过HTTP将Postfix中的电子邮件转发到您的Rails应用程序,我刚刚写了一篇关于我们如何做的文章。

实际上非常简单,但我们也在利用Postfix的功能,如果无法传递电子邮件,则推迟发送电子邮件。到目前为止我还没有在其他地方看到过。有关详细信息,请参阅http://www.doorkeeperhq.com/developer/smtp-to-web-api

答案 3 :(得分:1)

在mms2r中,MMS2R#default_media只返回最大的视频附件(如果存在),或最大的图像附件(如果存在),或最大的文本附件(如果存在),按此顺序。 MMS2R#default_text返回最大的text / plain附件(如果存在)。您还可以通过mms2r的媒体哈希直接访问任何附件,例如MMS2R#媒体。 MMS2R#media由mimetype键入,键引用的值是该类型的媒体数组。因此,如果MMS2R处理的电子邮件中有两个jpeg附件,您可以通过使用image / jpeg键入媒体哈希来访问它们,例如, MMS2R#media['image/jpeg']

当MMS2R首先处理电子邮件时,它找到的任何附件都会被解码并存储在该类型的媒体数组中。正如我所说,该数组然后由MMS2R#media哈希中的mimetype键入。

买这本书,我需要支付抵押费PeepCode book on receiving email with Ruby

答案 4 :(得分:0)

我最近编写了一个守护进程,它使用LMTP从Postfix接收邮件(它使用EventMachine并且非常快速且健壮)并将其保存到MongoDB。从这个意义上讲,它消除了中间人(IMAP服务器+ IMAP客户端)。这种方法提供了无限的可扩展性和冗余。其他后端支持(MySQL,Redis等)几乎可以立即添加。

received