Verified email not sending through Heroku/Mailgun

2019-02-07 00:09发布

I have Rails app on Heroku. It has a custom domain, and I've tried to set up email sending through Mailgun. I've installed Mailgun as an add-on through Heroku, and I've gone through the steps Mailgun gives to "verify" my custom domain. If I run Mailgun's "Check DNS Records Now" everything comes back green and the status is "Active." I can even send messages from my custom domain with the curl call they provide. However, when I try to send an email from my Rails app using ActionMailer I get: 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.

Why does it think I'm using a "Sandbox subdomain"? Here's what I have in 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' } 

For development I'm using Gmail so I know it's reading the right config file. And all the env vars are set correctly. The from is set correctly as well, I see it my logs (do-not-reply@my-custom-domain.com) What did I miss? Is there something that could still be propagating even through the status is active?

Thanks!

4条回答
Deceive 欺骗
2楼-- · 2019-02-07 00:26
  1. Make sure you have verified domain set (mailgun -> domains -> verified domains & dns - all green).
  2. Make sure you updated env variables in Heroku to work with verified domain (heroku -> settings -> reveal config vars) should have fields: MAILGUN_API_KEY, MAILGUN_DOMAIN, MAILGUN_SMTP_PASSWORD, MAILGUN_SMTP_LOGIN, MAILGUN_SMTP_SERVER, MAILGUN_SMTP_PORT with proper values.
  3. Make sure you have cleared the list of authorized recipients (mailgun -> domains -> authorized reciepients) - so everyone can receive your emails.
  4. Make sure you have cleared the list of IP whitelist (mailgun -> account overview -> account settings -> security -> IP whitelist) or included ip of your heroku app. In my case the only ip there was my localhost ip (for dev) and it was blocking heroku deployed app for sending emails.
查看更多
走好不送
3楼-- · 2019-02-07 00:38

So the issue turned out to be that when I verified my custom domain it created a second domain under my Heroku/Mailgun account. I still had the credentials from the xxx.mailgun.org (sandbox) domain in my Heroku env vars. Once I replaced them with the credentials from my custom domain everything worked. (Since Heroku set the first set of env vars I foolishly assumed the new set would get put in automatically.) Sigh...

Thanks for your help lyen.

查看更多
相关推荐>>
4楼-- · 2019-02-07 00:39

Did you add the recipients of your e-mail to "Authorized Recipients" list under https://mailgun.com/app/domains/sandbox_your_domain.mailgun.org?

enter image description here

Be sure to add a real e-mail address which can receive e-mails.

This is because mailgun would send a confirmation e-mail asking if the owner of the e-mail address really wants to receive e-mails from mailgun.

查看更多
做个烂人
5楼-- · 2019-02-07 00:44

To add on to lostphilosopher answer, I recently solved this MailGun custom domain issue myself.

Here's what worked for me:

Situation: After successfully adding a custom domain to Mailgun, my mail sending/receiving stopped working

Errors: After adding custom domain and verifying DNS with Mailgun, I received error messages such as:

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.

Solution: Realize that Heroku does NOT automatically update configuration variables for you. You must manually update them with values for your new domain.

  1. In MailGun - Find your new MailGun domain settings under under https://mailgun.com/app/domains
  2. In Heroku - goto: Heroku > App > Settings > Reveal Config Vars
  3. In Heroku - Update the following config vars
    • MAILGUN_DOMAIN
    • MAILGUN_SMTP_LOGIN
    • MAILGUN_SMTP_PASSWORD

Update Heroku Config Vars With New MailGun Domain Settings

And yes I agree - MailGun docs are not the most thorough. Especially when it comes to testing your setup.

查看更多
登录 后发表回答