Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Verified email not sending through Heroku/Mailgun

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 ([email protected]) What did I miss? Is there something that could still be propagating even through the status is active?

Thanks!

like image 792
lostphilosopher Avatar asked May 30 '16 22:05

lostphilosopher


4 Answers

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.

like image 26
lostphilosopher Avatar answered Oct 02 '22 14:10

lostphilosopher


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.

like image 27
ckib16 Avatar answered Oct 02 '22 14:10

ckib16


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.

like image 45
Brian Avatar answered Oct 02 '22 14:10

Brian


  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.
like image 101
mtx Avatar answered Oct 02 '22 13:10

mtx