验证电子邮件不通过Heroku/Mailgun发送

0mkxixxg  于 2023-10-19  发布在  其他
关注(0)|答案(5)|浏览(209)

我在Heroku上有Rails应用程序。它有一个自定义域,我试着设置通过Mailgun发送电子邮件。我已经通过Heroku安装了Mailgun作为附加组件,并且我已经完成了Mailgun提供的“验证”我的自定义域的步骤。如果我运行Mailgun的“立即检查DNS记录”,所有内容都返回绿色,状态为“活动”。然而,当我尝试使用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.
为什么它认为我在使用“沙盒子域”?以下是我在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,所以我知道它阅读正确的配置文件。所有的env变量都设置正确。从正确设置以及,我看到它我的日志(email protected(https://stackoverflow.com/cdn-cgi/l/email-protection))我错过了什么?有没有什么东西即使在状态处于活动状态时仍然可以传播?
谢谢你,谢谢

dwthyt8l

dwthyt8l1#

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

aydmsdu9

aydmsdu92#

为了补充lostphilosopher答案,我最近自己解决了这个MailGun自定义域问题。
以下是对我有效的方法:

情况:在成功添加自定义域到Mailgun后,我的邮件发送/接收停止工作
错误:添加自定义域名并使用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下查找您的新MailGun域设置
1.在Heroku -后藤中:Heroku >应用程序>设置>显示配置变量

  • 在Heroku中-更新以下配置变量
  • 邮箱_域名
  • 邮箱_SMTP_登录
  • 邮件枪_SMTP_密码

是的,我同意- MailGun文档不是最彻底的。特别是在测试你的设置时。

jgovgodb

jgovgodb3#

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

请务必添加一个可以接收电子邮件的真实的电子邮件地址。
这是因为 mailgun 会发送一封确认电子邮件,询问电子邮件地址的所有者是否真的希望从 mailgun 接收电子邮件。

ljo96ir5

ljo96ir54#

1.确保你已经验证了域设置(mailgun -> domains -> verified domains & dns - all绿色)。
1.确保您更新了Heroku中的env变量,以便与已验证的域一起使用(heroku ->设置->显示配置变量)应该具有字段:MAILGUN_API_KEYMAILGUN_DOMAINMAILGUN_SMTP_PASSWORDMAILGUN_SMTP_LOGINMAILGUN_SMTP_SERVERMAILGUN_SMTP_PORT的值。
1.确保您已清除授权收件人列表(mailgun -> domains -> authorized recipients)-这样每个人都可以收到您的电子邮件。
1.请确保您已清除IP白名单列表(mailgun ->帐户概述->帐户设置->安全性-> IP白名单)或包含heroku应用的IP。在我的情况下,唯一的IP是我的localhost IP(用于开发),它阻止了heroku部署的发送电子邮件的应用程序。

kjthegm6

kjthegm65#

更新对不起,但下面的说明显示了如何使用sendgrid发送邮件,但仍然在沙箱模式下。如果我知道如何退出沙盒模式,我将更新这些步骤。

我不得不等了10分钟,然后它就随机开始工作了(沙箱错误消失了)--我不需要在heroku中更改配置变量,也不需要登录sendgrid网站。
以下是从开始到结束要做的一切:

4步安装mailgun heroku插件

第一步

运行heroku addons:create mailgun:starter(根据heroku mailgun docs

第二步

将这些URL添加到production.rb(将https://www.example.com替换为您的真实的网站URL,将yourapp替换为您的heroku应用程序URL -使用heroku info查找):

# Note: no trailing slash on host url
config.action_mailer.default_url_options = { :host => 'https://www.example.com' } 

# From the heroku docs:
# https://devcenter.heroku.com/articles/mailgun#sending-emails-via-smtp

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         => 'yourapp.herokuapp.com',
  :authentication => :plain,
}
ActionMailer::Base.delivery_method = :smtp

第三步

在浏览器中,转到您的heroku Jmeter 板,选择您的应用程序->资源-> Mailgun(我不确定这一步是否必要,但我这样做了,所以我在这里包含它-也许有人可以确认它是否必要)

第四步

等待大约10-20分钟。1
1我犹豫了10分钟左右,然后开始工作,除了等待,我什么也没做:

Net::SMTPUnknownError (could not get 3xx (421: 421 Domain
sandboxsldkjfsldkjfsldkjflkjsdfa8.mailgun.org is not allowed to send:
Sandbox subdomains are for test purposes only. Please add your own domain
or add the address to authorized recipients in Account Settings.

奖励

这里有一个非常简单的方法来测试rails控制台的邮件。转到Rails控制台,

heroku run rails console

然后将其放入控制台(替换from和to字段):

class TestMailer < ApplicationMailer
  default from: '[email protected]'

  def test_email
    mail(to: '[email protected]', 
         subject: 'Test Email from Rails Console', 
         body: 'This is a test email.')
  end
end

TestMailer.test_email.deliver_now

相关问题