Send Email via Office 365 Exchange Online From Action Mailer in Rails

Microsoft's Office 365 Exchange Online is a great SMTP solution. See how to configure Action Mailer in your Ruby on Rails application to send emails via Exchange Online.


Exchange Online (the hosted Exchange product that is sold as part of Microsoft’s Office 365 suite) is fast becoming a gold-standard in the business-grade email market. As a result, there are cases when a Ruby on Rails application would benefit from sending emails via the Exchange Online SMTP service.

Add the below snippet to your environment configuration file (e.g: development.rb or production.rb):

config.action_mailer.smtp_settings = {
  address:              "smtp.office365.com",
  port:                 587,
  domain:               "mydomain.com",
  user_name:            "[email protected]",
  password:             "password",
  authentication:       :login,
  enable_starttls_auto: true
}
config.action_mailer.delivery_method = :smtp

Tip: Best practices suggest that the login credentials should be stored in environment variables. This keeps sensitive login credentials out of project source code.

Use the below snippet as a guide when configuring your mailer:

class ContactMailer < ApplicationMailer
  def contact_email(name, email, message)
    @name = name
	@email = email
	@message = message
    mail(to: "[email protected]", subject: "Contact from website", reply_to: @email, from: "Sender Name <[email protected]>")
  end
end

Warning: The email address the mailer sends from must match the email address used in the Action Mailer configuration's user_name field. If this doesn't match, the message will be rejected by the Exchange Online SMTP service.

Troubleshooting

If you find during testing that emails are not being sent, temporarily set Action Mailer's raise_delivery_errors option to true to help with debugging.

config.action_mailer.raise_delivery_errors = true