我一直在努力找出在rails应用程序中处理传入电子邮件的最佳方法。我意识到“最佳实践”是非常主观的,所以我首先要说明我的主要关注点是可扩展性和效率。这是一个问题,主要是因为我的使用将涉及处理可能很大的附件。
似乎就在昨天,接受的方法是使用ActionMailer接收电子邮件,但最近我偶然发现了几篇文章说这是低效的,因为它会在每封电子邮件中生成一个新的rails实例(大量可怕)。 / p>
最近,这篇文章引起了我的注意: http://jasonseifer.com/2009/04/24/receving-email-with-rails
该帖子谈到了ActionMailer系统的精简版本,该系统并没有被强制生成整个rails实例,但是评论还谈到了其他几个选项,比如专用的邮件目录(maildir?)和imap / pop检索。
我的问题是:有没有人想过在铁路应用程序(包括附件)中处理传入电子邮件的最佳选择是什么?
答案 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等)几乎可以立即添加。