Rails 6 现在带有 Action Mailbox。文档和社区没有关于如何集成最常见服务(如 SendGrid)之外的各种服务的大量资源。
假设一个人使用 Google 的 Gsuite Gmail:
他们如何将其与 Action Mailbox 集成?
有人会使用 Gmail 的 API,还是不适合 Action Mailbox?
如果 Gmail 无法正常工作,SendGrid 有什么不同可以使其适当集成?
Rails 6 现在带有 Action Mailbox。文档和社区没有关于如何集成最常见服务(如 SendGrid)之外的各种服务的大量资源。
假设一个人使用 Google 的 Gsuite Gmail:
他们如何将其与 Action Mailbox 集成?
有人会使用 Gmail 的 API,还是不适合 Action Mailbox?
如果 Gmail 无法正常工作,SendGrid 有什么不同可以使其适当集成?
Action Mailbox 是围绕实时接收来自邮件传输代理 (MTA) 的电子邮件而构建的,而不是定期从邮箱中获取电子邮件。也就是说,它接收通过 SMTP 发送的邮件,它不会从另一个已经收到邮件的服务器获取邮件(使用 IMAP 或 POP3)。
为此,它依赖于外部(Rails)SMTP 服务接收电子邮件,然后将电子邮件传递到 Action Mailbox。这些外部服务称为“入口”,在撰写本文时,有5 个可用入口。
在这五个中,四个是商业服务,它们将为您运行所需的 SMTP 服务器,然后将电子邮件“传递”到您的应用程序(通常作为 JSON 有效负载通过 webhook)。
您已经可以在 Rails 应用程序中使用这些服务并自己处理 webhook,但 Action Mailbox 在顶部构建了一组标准化的功能。几乎就像一组导轨来引导和加速这个过程。
此外,第五个入口是“中继”入口。这允许您在同一台机器上运行自己支持的 MTA(SMTP 服务器),并将收到的电子邮件中继到操作邮箱(通常是原始电子邮件)。当前支持的 MTA 有:
要回答您有关 Gmail 的具体问题:
- 他们如何将其与 Action Mailbox 集成?
他们不能直接。他们还需要设置上面列出的 7 个 MTA 之一,然后以某种方式将电子邮件发送给它。交付可以通过以下方式完成:
- 有人会使用 Gmail 的 API,还是不适合 Action Mailbox?
即使有办法让 Gmail 在收到的电子邮件上触发 webhook(我不知道上述高级路由规则之外的任何特殊传递选项),目前也无法将该理论 webhook 连接到 Action Mailbox。
- 如果 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 记录。
要将 IMAP 与 Rails 集成,请查看伟大的mail_room
Gem
这是一个守护进程,您可以在您的应用程序旁边启动它,它侦听几个 IMAP 收件箱,然后将它们转换为 Sidekiq Worker 或通过 http 将其推送到您的应用程序。
Gitlab 将它用于他们的邮件交互(回答线程,通过写电子邮件创建问题)。
他们还有一个关于如何与 ActionMailbox 集成的部分。
如果您下定决心这样做,Gmail 从第一天起就提供 IMAP IDLE(推送)支持。
编写一个监视 Gmail 收件箱并使用格式正确的 JSON 有效负载调用 rails action 邮箱 webhook 端点的小型守护程序将非常容易。