如何在不通过PostFix等邮件服务器或通过pop3等获取邮件的情况下,如何在Ruby on Rails应用程序中接收邮件。
我要做的是抓住发送到@ mydomain.com的所有邮件,并在我的应用程序中对它们做些什么。我不需要存储邮件或类似的东西。
这是可能的吗?
答案 0 :(得分:2)
我刚刚为我的SAAS实现了这一功能,以便自动处理邮件发送通知消息。
给我打电话,给你打电话?
你叫我 您可以设置本地邮件服务器。然后它将响应传入的电子邮件,并启动rails可执行文件来处理电子邮件。不建议使用此方法,因为启动rails是一项重大任务(需要多秒和大量内存)。你不想因为收到电子邮件而启动Rails坏男孩。您将编写自己的DDOS攻击。 (攻击自己。)
我叫你 而是通过使用单个作业处理所有当前正在等待的电子邮件,按照您自己的计划轮询电子邮件。您需要设置后台作业处理程序,因为stock rails专注于响应Web请求。我使用delayed_job,但还有其他选择,包括经常开始一个cron作业。
另一个好处是您不需要管理邮件服务器。把这个头痛留给别人。然后使用Ruby库net :: imap来读取传入的邮件并对其进行处理。
如果您的进程无法识别电子邮件格式,请将msg转发给人员进行处理。
如果进程发送邮件除了阅读/处理邮件之外,请确保该进程使用不同的电子邮件地址作为其发件人地址。否则,在整个过程中某些时候几率很高,你最终会在一个电子邮件循环中和许多千兆字节的消息来回传递。例如,您的进程会收到一条消息,对其进行响应,但与此同时,发送方(人类)已启用了休假响应。然后你的机器人响应度假反应..... oops ....
编写自己的邮件服务器
回复:
如何在不通过PostFix等邮件服务器或通过pop3等获取邮件的情况下,如何在Ruby on Rails应用程序中接收邮件。
我要做的是抓住发送到@ mydomain.com的所有邮件,并在我的应用程序中对它们做些什么。我不需要存储邮件或类似的东西。
直接回答:是的,您可以通过编写smtp服务器并设置dns来完成此操作,这样您的计算机就可以成为域的邮件目的地。您的smtp服务器会动态处理这些消息,它们在任何时候都不会存储在您的系统上。
这是个好主意吗?一点都不。虽然外观可能相反,但电子邮件是存储转发系统。在应用程序处理消息之前,尽量避免存储消息并不聪明。这将是一个非常糟糕的“优化”。但是,使用访问协议(POP3或IMAP)是避免安装,配置和管理邮件服务器的成本的好方法。
答案 1 :(得分:1)
如果您编写自己的邮件服务器,或者邮件服务器支持在收到邮件时运行外部程序(例如procmail),则可以执行此操作。
如果您没有可用的procmail(或者,如果在Exchange Server之类的东西上,不想编写自定义规则或扩展名),那么最好使用pop3库来获取邮件。
显然,编写邮件服务器比任何替代方案都困难。
如果您最担心检查可能有数百个电子邮件帐户,那么可以通过正确配置您的电子邮件服务器来解决这个问题。如果您在托管服务提供商处,请询问服务器管理员有关创建“全能”帐户,该帐户将所有邮件路由到未知地址到单个帐户。
答案 2 :(得分:0)
如果您的目标是避免轮询服务器,请考虑使用IMAP IDLE命令。我已经成功编写了一个Ruby客户端,可以打开与IMAP服务器的连接,并在新邮件到达时被服务器告知。