Why is this mailer not sending any mail? (Or any ideas for debugging?)
In my_app/config/environments/development.rb I have this code:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'my_app.com',
user_name: ENV['GMAIL_USERNAME'],
password: ENV['GMAIL_PASSWORD'],
authentication: 'plain',
enable_starttls_auto: true }
Then on my local computer in ~/.bash_profile I have this code:
export GMAIL_USERNAME='blah@my_app.com'
export GMAIL_PASSWORD='***'
When I run $ env
in my terminal, I see that both environment variables are correctly set.
I have also restarted my rails server.
For anyone not using smtp, switching the delivery method to sendmail helped me in addition to explicitly setting deliveries to be performed:
So I've figured it out. Having the line
ActionMailer::Base.delivery_method = :smtp
inconfig/environment.rb
overridesActionMailer::Base.delivery_method = :test
inconfig/environments/test.rb
.So, delete that line,
ActionMailer::Base.delivery_method = :smtp
fromconfig/environment.rb
and place it inconfig/environments/production.rb
. That allows you to placeActionMailer::Base.delivery_method = :test
inconfig/environments/test.rb
and the version you want inconfig/environments/development.rb
. I madedevelopment.rb
:test
as I populated my database using Faker and changed it to:smtp
so I was sure that real emails were sent as an additional check.Note: You must restart your server for these changes to take effect.
Another note: Heroku's current SendGrid Instructions (https://devcenter.heroku.com/articles/sendgrid) put the SendGrid Heroku configuration code in a new
config/initializers/mail.rb
file which will likely require removing its last line and placing the desired version in eachconfig/environments/[production.rb, development.rb, test.rb]
You should add
as by default this is on false, preventing mails to be sent from your development environment...
If you're having issues sending email from console, you have to call the deliver method on your mail.
All of these answers are great, but there is another place where you can get burned, especially in the context of debugging.
In
development.rb
make sure you setconfig.action_mailer.raise_delivery_errors = true
If your
.deliver
method seems to be working without issue, but you never actually receive the email across the wire, your delivery method may be throwing an exception and rails is swallowing the error. This is very true if you simply have something as simple as a misconfigured credentials, or an aws access denied API error. Save ripping your hair out and make sure you haveraise_delivery_errors
turned on. It wants to tell you something but can't.