Rails 6 Action 邮箱和 Gmail 集成方法

kar*_*rns 5 ruby-on-rails ruby-on-rails-6 action-mailbox

Rails 6 现在带有 Action Mailbox。文档和社区没有关于如何集成除最常见的服务(如 SendGrid)之外的各种服务的大量资源。

假设一个人使用 Google 的 Gsuite Gmail:

  1. 他们如何将其与 Action Mailbox 集成?

  2. 会使用 Gmail 的 API,还是不适合 Action Mailbox?

  3. 如果 Gmail 不起作用,那么 SendGrid 有什么不同使它能够适当地集成?

stw*_*ert 6

要将 IMAP 与 Rails 集成,请查看伟大的mail_room Gem

它是一个守护进程,您可以与您的应用程序一起启动,它监听几个 IMAP 收件箱,然后将它们转换为 Sidekiq Worker 或通过 http 将其推送到您的应用程序。

Gitlab 使用它进行邮件交互(回答线程、通过写入电子邮件创建问题)。

他们还有一个关于如何与 ActionMailbox 集成的部分。


Mat*_*hew 5

Action Mailbox 是围绕实时从邮件传输代理 (MTA) 接收电子邮件而构建的,而不是定期从邮箱中获取电子邮件。也就是说,它接收通过 SMTP 发送的邮件,它不会从已经收到邮件的另一台服务器获取邮件(使用 IMAP 或 POP3)。

为此,它依赖于接收电子邮件并将电子邮件发送到 Action Mailbox 的外部(Rails)SMTP 服务。这些外部服务称为“入口”,在撰写本文时,有5 个可用入口

在这五个中,四个是商业服务,它们将为您运行所需的 SMTP 服务器,然后将电子邮件“发送”到您的应用程序(通常作为 JSON 负载通过 webhook)。

您已经可以在 Rails 应用程序中使用这些服务并自己处理 webhooks,但 Action Mailbox 在上面构建了一组标准化的功能。几乎就像一组导轨来引导和加速这个过程。

此外,第五个入口是“中继”入口。这允许您在同一台机器上运行您自己支持的 MTA(SMTP 服务器),并将收到的电子邮件中继到 Action Mailbox(通常是原始电子邮件)。当前支持的 MTA 是:

要回答有关 Gmail 的具体问题,请执行以下操作:

  1. 他们如何将其与 Action Mailbox 集成?

他们不能直接。他们还需要设置上面列出的 7 个 MTA 之一,然后以某种方式将电子邮件发送给它。交付可以通过以下方式完成:

  • 用户在邮箱级别管理的转发规则
  • 由管理员在域级别管理的双重交付、拆分交付或其他一些高级路由规则
  1. 会使用 Gmail 的 API,还是不适合 Action Mailbox?

即使有办法让 Gmail 对传入的电子邮件触发 webhook(我不知道上述高级路由规则之外的任何特殊传递选项),目前也无法将该理论 webhook 连接到 Action Mailbox。

  1. 如果 Gmail 不起作用,那么 SendGrid 有什么不同使它能够适当地集成?

Sendgrid(以您的示例为例,其他人或多或少以相同的方式工作)提供了入站邮件处理 API。同样重要的是,Rails 团队已经构建了一个传入电子邮件控制器来与该 API 集成。

鉴于缺乏 Gmail API 和缺乏 Rails 入口控制器,我能想到的唯一方法是将 Action Mailbox 连接到现有的 Gmail 邮箱是使用其他一些代码来检查邮箱,重新格式化获取的电子邮件然后伪装成受支持的 MTA 之一将其传送到 Action Mailbox。

这将是一个有趣的练习,可能会成为一种流行的宝石,但它会非常混乱。如果做得好,这是一个光荣的混搭,但仍然是一个混搭。


另一种选择是让您的 example.com 域照常发送到 Gmail,并为您的 Action Mailbox 电子邮件设置另一个域。您可以使用单独的域 example.org 或子域 app.example.com。

这将涉及设置 7 个受支持的 SMTP 服务器之一,并将 example.org 或 app.example.com 的 MX 记录指向这些服务器。


额外花絮: MTA 的另一个名称是 Mail eXchager,因此 DNS 邮件记录的名称是 MX 记录。