已验证的电子邮件未通过 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 不会自动为您更新配置变量。您必须使用新域的值手动更新它们。
- 在 MailGun 中 - 在 https://mailgun.com/app/domains
下找到您的新 MailGun 域设置
- 在 Heroku 中 - 转到:Heroku > App > Settings > Reveal Config Vars
- 在 Heroku 中 - 更新以下配置变量
- MAILGUN_DOMAIN
- MAILGUN_SMTP_LOGIN
- MAILGUN_SMTP_PASSWORD
是的,我同意 - MailGun 文档不是最详尽的。尤其是在测试您的设置时。
- 确保您已验证域集(mailgun -> 域 -> 已验证域和 dns - 全绿色)。
- 确保您更新了 Heroku 中的 env 变量以使用经过验证的域(heroku -> 设置 -> 显示配置变量)应该具有以下字段:
MAILGUN_API_KEY
、MAILGUN_DOMAIN
、MAILGUN_SMTP_PASSWORD
, MAILGUN_SMTP_LOGIN
, MAILGUN_SMTP_SERVER
, MAILGUN_SMTP_PORT
具有适当的值。
- 确保您已清除授权收件人列表(mailgun -> 域 -> 授权收件人)- 这样每个人都可以收到您的电子邮件。
- 确保您已清除 IP 白名单列表(mailgun -> 帐户概览 -> 帐户设置 -> 安全 -> IP 白名单)或包含您的 heroku 应用程序的 ip。
在我的例子中,唯一的 ip 是我的本地主机 ip(用于开发),它阻止了 heroku 部署的应用程序发送电子邮件。
我在 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 不会自动为您更新配置变量。您必须使用新域的值手动更新它们。
- 在 MailGun 中 - 在 https://mailgun.com/app/domains 下找到您的新 MailGun 域设置
- 在 Heroku 中 - 转到:Heroku > App > Settings > Reveal Config Vars
- 在 Heroku 中 - 更新以下配置变量
- MAILGUN_DOMAIN
- MAILGUN_SMTP_LOGIN
- MAILGUN_SMTP_PASSWORD
是的,我同意 - MailGun 文档不是最详尽的。尤其是在测试您的设置时。
- 确保您已验证域集(mailgun -> 域 -> 已验证域和 dns - 全绿色)。
- 确保您更新了 Heroku 中的 env 变量以使用经过验证的域(heroku -> 设置 -> 显示配置变量)应该具有以下字段:
MAILGUN_API_KEY
、MAILGUN_DOMAIN
、MAILGUN_SMTP_PASSWORD
,MAILGUN_SMTP_LOGIN
,MAILGUN_SMTP_SERVER
,MAILGUN_SMTP_PORT
具有适当的值。 - 确保您已清除授权收件人列表(mailgun -> 域 -> 授权收件人)- 这样每个人都可以收到您的电子邮件。
- 确保您已清除 IP 白名单列表(mailgun -> 帐户概览 -> 帐户设置 -> 安全 -> IP 白名单)或包含您的 heroku 应用程序的 ip。 在我的例子中,唯一的 ip 是我的本地主机 ip(用于开发),它阻止了 heroku 部署的应用程序发送电子邮件。