我正在考虑应该处理传入邮件的系统的体系结构,并将其传递给处理传入邮件的Rails应用程序。 我不知道什么是做这种事情的最好方法。
它应该像这样工作:
它应该基本上像一个queque一样工作。 邮件stream量的突然高峰不应该杀死rails应用程序。
我不是在寻找一个完整的解决scheme。 我只是对你的意见感兴趣。 我想了3个可能的select:
您认为最好的方法是性能和安全性? 我在这里错过了什么? 有没有更好的办法? 你现在有一些最佳实践资源?
谢谢!
这里有一个post可以帮助:
使用Rails接收电子邮件和附件
文章也有链接到以前的post设置RailsCron。
我已经看到了应用程序使用POP3(Spiceworks是我能想到的一个例子)。 我认为这是一个体面的方式来分开应用程序。 服务器,并且允许你让邮件服务器把注意力集中在做什么,并且把这个客户从邮件的排队/存储任务中解放出来。
重新:安全
popup的POP3问题是默认使用明文凭证。 如果可以通过SSL(依赖于邮件服务器)运行它,则可以减轻这种担忧。
重新:Perf和缩放
我不太确定POP3访问会如此缓慢。 我会在文件系统层面上进行整合,因为你可能有争用和locking问题(呃 – 想想在NFS上安装maildirs作为一个有趣的文件系统争用问题的例子),因为新的邮件进来了。一个很好的方法来自动访问邮箱中的项目。
让多个用户同时在同一POP3邮箱上运行可能会有问题(如果您要扩展以处理更多的邮件通信)。 为此,您可能需要在邮件服务器端编写脚本,将传入的邮件分发到一组邮箱中,然后将每个使用者绑定到给定的邮箱。 (您可能会考虑将IMAP用于多用户体系结构,但这只是我想象中的烟雾而已。)
当然,添加更多图层和潜在的瓶颈,不仅仅是直接将SMTP接收到代码中,而是利用邮件服务器作者已经完成的所有工作。 但是,我宁愿在邮件服务器上出现扩展问题,而不是自定义SMTP服务器代码上的扩展问题。
Rails可能是这个工作的错误工具。 你可能会想写一个小脚本,接受stdin上的电子邮件,并将其插入到数据库中。 您可能可以使用相同的ActiveRecord代码来执行此操作。 然后,您只需要设置您的MTA通过将它传送到您的脚本来传送邮件。
如果您需要更多的性能,您可以将您的脚本重写为一个守护进程,它通过LTMP接受电子邮件,这将节省为每个邮件启动进程的低效率。
我要么简单地创build一个工具,定期获取定义的POP3帐户中的所有邮件,甚至更好(恕我直言)在事件的基础上获取它。
按照事件的基础,我的意思是这样的:你有一个网站,列出检索到的电子邮件。 每当这个网站被加载一个后台任务被激发从邮箱提取看不见的邮件。
当然这取决于你的系统是什么样的。 如果没有真正了解应用程序,很难说。
另一方面,你可能会更好的问这个http://stackoverflow.com
使用IMAP(S)代替POP(如果你走这条路线)。 这样一来,你就可以在服务器上执行操作后,将它们“读取”。
您可以下载一个免费的POP / SMTP com组件www.system-engine.com,它具有集成到Web应用程序的钩子。