I’m a huge fan of Amazon web services. They’ve served me quite well with some of my ASP.NET applications. So I’d be foolish (in my opinion anyway) not to use them in my Rails applications. I’m in need of sending transactional email from some of my Rails web apps, so I set up my SES account. I didn’t want to use the amazon-ses-mailer gem since SES now supports SMTP. So I generated my SMTP credentials and went into my application.rb file to start configuring ActionMailer.
I was a little stumped after a while on how I should configure ActionMailer’s SMTP settings to use SES via SMTP. A few posts here, here, and finally on this StackOverflow post lead me to this configuration:
config.action_mailer.default_url_options = { :host => "thenameofyourdomain.com" } config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => "email-smtp.us-east-1.amazonaws.com", :port => 465, :domain => "thenameofyourdomain.com", :authentication => :login, :user_name => "your-ses-smtp-username", :password => "your-ses-smtp-password" }
Now, SES SMTP uses TLS (SSL) when authenticating, so you need one more snippet of code in an initializer when your application starts up:
require 'net/smtp' module Net class SMTP def tls? true end end end
The final hint for me to get this working was the require ‘net/smtp’. Without it the email wouldn’t actually get delivered. I wanted to record this mostly for my reference in the future, but hopefully it helps any other Rails developers who get stuck on this topic.
Can you give a full working example
Hey Amit –
I’m pretty sure the snippets in the post should work. I actually use SendGrid now instead of AWS – much easier to set up plus you get analytics and tracking