Restrict email sent by your application to only approved domains or accounts.
Specify a domain (or set of domains, or magic word in email address) email is allowed to go to, and email to all other domains is silently dropped.
This is useful for testing or staging environments where you want to be certain email to real customers doesn’t escape the lab.
Layered on the Mail gem, so Rails >= 3.0 applications can use safety_mailer.
Add the gem to your Gemfile
, specifying groups (probably not production) to include it in.
gem "safety_mailer", :group => :development
Don’t forget to bundle install
to install
In your environment file config/environments/development.rb
configure it, and some regular expressions.
config.action_mailer.delivery_method = :safety_mailer config.action_mailer.safety_mailer_settings = { allowed_matchers: [ /mydomain.com/, /[email protected]/, /super_secret_test/ ], forward_to: [ '[email protected]' ] delivery_method: :smtp, delivery_method_settings: { :address => "smtp.mydomain.com", :port => 25, :domain => "mydomain.com", :authentication => :plain, :user_name => "[email protected]", :password => "password" } }
… and now, email to [email protected], [email protected], [email protected] all get sent and email to other recipients (like the real users in the production database you copied to a test server) is suppressed and be redirected to ‘forward_to` email (if any).
You can also disable the safety_mailer dynamically by setting the environment variable ‘DISABLE_SAFETY_MAILER=true`
Any user of the Mail gem can configure safety_mailer:
require "safety_mailer" Mail.defaults do delivery_method SafetyMailer::Carrier, { ... same settings as above } end
safety_mailer is released under the MIT license: