• Stars
    star
    227
  • Rank 174,985 (Top 4 %)
  • Language
    Ruby
  • License
    MIT License
  • Created over 11 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Intercept recipients when delivering email with the Mail gem.

recipient_interceptor

Use this Ruby gem to avoid emailing your users from non-production environments.

# Gemfile
gem "recipient_interceptor"

# config/environments/staging.rb
Mail.register_interceptor(
  RecipientInterceptor.new("[email protected]")
)

# config/environments/production.rb
My::Application.configure do
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: ENV.fetch("SMTP_ADDRESS"), # example: "smtp.sendgrid.net"
    authentication: :plain,
    domain: ENV.fetch("SMTP_DOMAIN"), # example: "heroku.com"
    enable_starttls_auto: true,
    password: ENV.fetch("SMTP_PASSWORD"),
    port: "587",
    user_name: ENV.fetch("SMTP_USERNAME")
  }
end

Email will be intercepted and delivered to the provided address with headers X-Intercepted-To, X-Intercepted-Cc, and X-Intercepted-Bcc added.

Configuration options and examples

Deliver intercepted email to multiple email addresses:

Mail.register_interceptor(
  RecipientInterceptor.new(["[email protected]", "[email protected]"])
)

Use a comma-delimited string:

Mail.register_interceptor(
  RecipientInterceptor.new("[email protected],[email protected]")
)

Use an environment variable:

# heroku config:set EMAIL_RECIPIENTS="[email protected],[email protected]" --app staging
Mail.register_interceptor(
  RecipientInterceptor.new(ENV["EMAIL_RECIPIENTS"])
)

Prefix the subject line with static text:

Mail.register_interceptor(
  RecipientInterceptor.new(
    ENV["EMAIL_RECIPIENTS"],
    subject_prefix: "[staging]",
  ),
)

Prefix the subject line with contents from the original message:

Mail.register_interceptor(
  RecipientInterceptor.new(
    ENV["EMAIL_RECIPIENTS"],
    subject_prefix: proc { |msg| "[staging] [#{(msg.to + msg.cc + msg.bcc).sort.join(",")}]" }
  ),
)

The object passed to the proc is an instance of Mail::Message.

Alternatives

Contributing

Fork the repo.

bundle
bundle exec rake

Make a change. Run tests. Open a pull request. Discuss/address any feedback with maintainer. Maintainer will merge.