已验证的电子邮件未通过 Heroku/Mailgun 发送

Verified email not sending through Heroku/Mailgun

我在 Heroku 上有 Rails 应用程序。它有一个自定义域,我尝试通过 Mailgun 设置电子邮件发送。我已经通过 Heroku 安装了 Mailgun 作为附加组件,并且完成了 Mailgun 为 "verify" 我的自定义域提供的步骤。如果我 运行 Mailgun 的 "Check DNS Records Now" 一切都变回绿色并且状态是 "Active." 我什至可以使用他们提供的 curl 调用从我的自定义域发送消息。但是,当我尝试使用 ActionMailer 从我的 Rails 应用程序发送电子邮件时,我得到:Net::SMTPFatalError (554 Sandbox subdomains are for test purposes only. Please add your own domain or add the address to authorized recipients in domain settings.

为什么它认为我使用的是 "Sandbox subdomain"?这是我在 environments/production.rb:

中的内容
  # Mailgun
  ActionMailer::Base.smtp_settings = {                                    
    port: ENV['MAILGUN_SMTP_PORT'],                                       
    address: ENV['MAILGUN_SMTP_SERVER'],                                  
    user_name: ENV['MAILGUN_SMTP_LOGIN'],
    password: ENV['MAILGUN_SMTP_PASSWORD'],                               
    domain: 'my-custom-domain.com',                                               
    authentication: :plain,                                               
  } 
  ActionMailer::Base.delivery_method = :smtp                              
  # Devise recoverable      
  config.action_mailer.default_url_options = { host: 'my-custom-domain.com' } 

为了开发,我使用的是 Gmail,所以我知道它正在读取正确的配置文件。并且所有环境变量都设置正确。来自的设置也正确,我看到它是我的日志 (do-not-reply@my-custom-domain.com) 我错过了什么?即使状态为活动,是否仍有一些东西可以传播?

谢谢!

您是否将电子邮件的收件人添加到 https://mailgun.com/app/domains/sandbox_your_domain.mailgun.org 下的 "Authorized Recipients" 列表中?

一定要添加可以接收邮件的真实邮箱地址。

这是因为 mailgun 会发送一封确认电子邮件,询问电子邮件地址的所有者是否真的想接收来自 mailgun 的电子邮件.

所以问题是,当我验证我的自定义域时,它在我的 Heroku/Mailgun 帐户下创建了第二个域。我的 Heroku 环境变量中仍然有来自 xxx.mailgun.org(沙盒)域的凭据。一旦我用我的自定义域中的凭据替换它们,一切正常。 (由于 Heroku 设置了第一组环境变量,我愚蠢地认为新的一组会自动放入。)唉...

谢谢你的帮助,lyen。

为了补充 lostphilosopher 答案,我最近自己解决了这个 MailGun 自定义域问题。

以下是对我有用的方法:

情况:成功将自定义域添加到 Mailgun 后,我的邮件 sending/receiving 停止工作

错误:添加自定义域并使用 Mailgun 验证 DNS 后,我收到如下错误消息:

Net::SMTPFatalError: 554 Sandbox subdomains are for test purposes only. Please add your own domain or add the address to authorized recipients in Account Settings.

解决方案:意识到 Heroku 不会自动为您更新配置变量。您必须使用新域的值手动更新它们。

  1. 在 MailGun 中 - 在 https://mailgun.com/app/domains
  2. 下找到您的新 MailGun 域设置
  3. 在 Heroku 中 - 转到:Heroku > App > Settings > Reveal Config Vars
  4. 在 Heroku 中 - 更新以下配置变量
    • MAILGUN_DOMAIN
    • MAILGUN_SMTP_LOGIN
    • MAILGUN_SMTP_PASSWORD

是的,我同意 - MailGun 文档不是最详尽的。尤其是在测试您的设置时。

  1. 确保您已验证域集(mailgun -> 域 -> 已验证域和 dns - 全绿色)。
  2. 确保您更新了 Heroku 中的 env 变量以使用经过验证的域(heroku -> 设置 -> 显示配置变量)应该具有以下字段:MAILGUN_API_KEYMAILGUN_DOMAINMAILGUN_SMTP_PASSWORD , MAILGUN_SMTP_LOGIN, MAILGUN_SMTP_SERVER, MAILGUN_SMTP_PORT 具有适当的值。
  3. 确保您已清除授权收件人列表(mailgun -> 域 -> 授权收件人)- 这样每个人都可以收到您的电子邮件。
  4. 确保您已清除 IP 白名单列表(mailgun -> 帐户概览 -> 帐户设置 -> 安全 -> IP 白名单)或包含您的 heroku 应用程序的 ip。 在我的例子中,唯一的 ip 是我的本地主机 ip(用于开发),它阻止了 heroku 部署的应用程序发送电子邮件。