【问题标题】:Receive mail in Ruby/Rails在 Ruby/Rails 中接收邮件
【发布时间】:2010-02-17 21:12:50
【问题描述】:

我将如何在 Ruby on Rails 应用程序中接收邮件而不通过 PostFix 等邮件服务器或通过 pop3 等获取邮件。

我要做的是捕获所有发送到@mydomain.com 的邮件,然后在我的应用程序中处理它们。我不需要存储邮件或类似的东西。

这可能吗?

【问题讨论】:

    标签: ruby-on-rails email


    【解决方案1】:

    我刚刚为我的 SAAS 实现了此功能,以自动处理邮件退回通知消息。

    打给我,打给你?

    你叫我 您可以设置本地邮件服务器。然后它会响应传入的电子邮件,并启动一个 rails 可执行文件来处理电子邮件。不建议使用此方法,因为启动 rails 是一项艰巨的任务(需要几秒钟和大量内存)。您不希望仅仅因为您收到一封电子邮件而启动 Rails 坏小子。您将编写自己的 DDOS 攻击。 (攻击自己。)

    我叫你 相反,通过使用单个作业处理所有当前等待的电子邮件,按您自己的时间表轮询电子邮件。您需要设置后台作业处理程序,因为 stock rails 专注于响应 Web 请求。我使用delayed_job,但还有其他选择,包括经常启动一个cron作业。

    另一个好处是您不需要管理邮件服务器。把这个头痛留给别人。然后使用 Ruby 库 net::imap 读取收到的邮件并进行处理。

    如果您的流程无法识别电子邮件格式,则将消息转发给人工处理。

    并确保如果进程发送邮件除了阅读/处理邮件之外,该进程使用不同电子邮件地址作为其发件人地址。否则,很有可能在此过程中的某个时候,您最终会陷入电子邮件循环,并且来回传递大量千兆字节的消息。例如,您的进程收到一条消息并对其进行响应,但与此同时,发件人(人类)已打开休假响应。然后您的机器人会响应假期响应.....哎呀....

    编写自己的邮件服务器

    回复:

    我将如何在 Ruby on Rails 应用程序中接收邮件而不通过 PostFix 等邮件服务器或通过 pop3 等获取邮件。

    我要做的是捕获所有发送到@mydomain.com 的邮件,然后在我的应用程序中处理它们。我不需要存储邮件或类似的东西。

    直接回答:是的,您可以通过编写 smtp 服务器并设置 dns 来做到这一点,这样您的机器将成为域的邮件目的地。您的 smtp 服务器会即时处理消息,它们不会在任何时候存储在您的系统上。

    这是个好主意吗?一点都不。虽然表面上可能相反,但电子邮件是一种存储和转发系统。试图在你的应用处理它们之前避免存储它们是不明智的。这将是一个非常非常糟糕的“优化”。但是,使用访问协议(POP3 或 IMAP)是避免安装、配置和管理邮件服务器成本的好方法。

    【讨论】:

      【解决方案2】:

      如果您编写自己的邮件服务器,或者您的邮件服务器支持挂钩以在收到邮件时运行外部程序(例如 procmail),则可以这样做。

      如果您没有可用的 procmail(或者,如果在 Exchange Server 之类的东西上,不想编写自定义规则或扩展),您最好使用 pop3 库来获取邮件。

      显然,编写邮件服务器比任何替代方案都更困难。

      如果您最担心检查可能有数百个电子邮件帐户,可以通过正确配置您的电子邮件服务器来解决。如果您使用托管服务提供商,请询问您的服务器管理员是否创建一个“包罗万象”的帐户,将所有邮件路由到未知地址到一个帐户。

      【讨论】:

        【解决方案3】:

        如果您的目标是避免轮询服务器,请考虑使用 IMAP IDLE 命令。我已经成功编写了一个 Ruby 客户端,它打开了与 IMAP 服务器的连接,并在新邮件到达时由 服务器 通知。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-15
          • 2019-05-08
          • 2019-10-23
          • 1970-01-01
          • 2017-04-30
          • 1970-01-01
          • 2010-11-19
          • 1970-01-01
          相关资源
          最近更新 更多