Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Mass Mandrill

Mass Mandrill is thin wrapper around mandrill-api gem that makes sending emails with Mandrill easier and more pleasent to use. Goal is to resemble Rails' ActionMailer API. Although sending emails with Mass Mandrill looks like sending emails with ActionMailer, Mass Mandrill does not depend on Rails and it can be used in non-Rails applications.

Mass Mandrill supports bulk email sending and Mandrill templates. To learn more about these topics, visit Mandrill Support.


class ExampleMailer < MassMandrill::MandrillMailer

  def example_notice(recipients)
    addresses = { |recipient| }
    global_merge_vars = [{ name: 'headline', content: 'This is first example notice' }]
    merge_vars = do |recipient|
        :rcpt =>,
        :vars => [{ :name => 'first_name', :content => recipient.first_name }]
    template_content = [{ :name => 'header', :content => '<h1>Hello World</h1>' }]

    mail(to: addresses,
         from: 'John Doe <>',
         subject: 'This is example notice!',
         template_content: template_content,
         global_merge_vars: global_merge_vars,
         merge_vars: merge_vars)


And to send the email:

users = User.all

Name of the Mandrill template that's going to be used for sending is same as name of the method - in example above example_notice. To override template name, use template parameter:

mail(to: addresses,
     from: 'John Doe <>',
     subject: 'This is example notice!',
     template: 'some_other_template',
     global_merge_vars: global_merge_vars,
     merge_vars: merge_vars)

You can omit some options like from and subject in which case the default from and subject that are stored remotely on the Mandrill server will be used. You can also send additional configuration to the message (like inline_css, track_opens, track_clicks, preserve_recipients, ...) by passing a hash of message_extra. For a complete list of these parameters, check the Mandrill Message API.

mail(to: addresses,
     global_merge_vars: global_merge_vars,
     merge_vars: merge_vars,
     message_extra: {
       inline_css: true,
       track_opens: false


Add mass_mandrill to your Gemfile:

gem 'mass_mandrill'

Install it:


Or if you are not using bundler:

gem install mass_mandrill

Place your Mandrill API key in MANDRILL_APIKEY environment variable (e.g. export MANDRILL_APIKEY=your-key). If you are using foreman to run your application, place it in your .env:


Contributing to Mass Mandrill

  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
  • Fork the project.
  • Start a feature/bugfix branch.
  • Commit and push until you are happy with your contribution.
  • Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Testing Mass Mandrill

Mass Mandrill is covered with RSpec tests. Besides that, there is a Rake task that sends test email to your email address for ultimate test. Follow these steps for running the Rake task:

Create Mandrill account at

Create a template called test_email with following content:


<p>Hello *|FIRST_NAME|*.</p>

Export your Mandrill API key in an environment variable:

export MANDRILL_APIKEY=your-key

Run the Rake task with your email address:

bundle exec rake test:send_email\[\]

Check your email to verify everything is working correctly.


Copyright (c) 2015 Trisignia, Nebojša Stričević. See LICENSE.txt for further details.