Rails 6操作邮箱和Gmail集成操作方法



Rails 6现在随Action Mailbox一起提供。文档和社区没有关于如何集成SendGrid等最常见服务之外的各种服务的大量资源。

假设一个人使用谷歌的Gsuite Gmail:

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

  2. 你会使用Gmail的API吗?还是这不适用于Action Mailbox?

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

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

这取决于外部(到Rails)SMTP服务接收电子邮件,然后将电子邮件发送到Action Mailbox。这些外部服务被称为";Ingress";并且,在撰写本文时,有5个可用的入口。

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

  • Mailgun-向下滚动到";入站">
  • Mandrill
  • 邮戳
  • 发送网格

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

此外,第五个入口是";继电器";进入。这允许您在同一台计算机上运行自己支持的MTA(SMTP服务器),并将收到的电子邮件中继到操作邮箱(通常是原始电子邮件)。目前支持的MTA有:

  • Exim
  • Postfix
  • Qmail

要回答您关于Gmail的特定问题:

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

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

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

即使有办法让Gmail在收到的电子邮件上启动网络挂钩(我不知道上面的高级路由规则之外有任何特殊的发送选项),目前也没有办法将理论上的网络挂钩连接到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服务器中的一个,并将MX记录(例如example.org或app.example.com)指向这些服务器。


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

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

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

Gitlab将其用于邮件交互(回答线程,通过写入电子邮件创建问题)。

他们还有一节介绍如何与ActionMailbox集成。

如果你一意孤行,Gmail从第一天起就支持IMAP IDLE(推送)。

编写一个小守护程序来监视Gmail收件箱并使用格式正确的JSON负载调用rails操作邮箱webhook端点是非常容易的。

最新更新