A gem plugin which allows messages prepared by ActionMailer to be delivered asynchronously. Assumes that you're using Resque (github.com/defunkt/resque) for your background jobs.
Include Resque::Mailer in your ActionMailer subclass(es) like this:
class MyMailer < ActionMailer::Base include Resque::Mailer end
Or if you want to always use asynchronous delivery by default, create an initializer in your Rails project or piggyback on your load_resque.rb initializer:
class ActionMailer::Base include Resque::Mailer end
Now, when MyMailer.deliver_subject_email is called, an entry will be created in the job queue. Your Resque workers will be able to deliver this for you; the queue we're using is imaginatively named mailer. Just make sure your workers know about it and are loading your environment:
QUEUE=mailer rake environment resque:work
Note that you can still have mail delivered synchronously by using the bang method variant: MyMailer.deliver_subject_email!
Install it as a plugin or as a gem plugin.
script/plugin install git://github.com/zapnap/resque_mailer.git # config/environment.rb config.gem 'resque_mailer'
You don't want to be sending actual emails in the test environment, so you can configure the environments that should be excluded like so:
# config/initializers/resque_mailer.rb Resque::Mailer.excluded_environments = [:test, :cucumber]
Note on Patches / Pull Requests
Fork the project.
Make your feature addition or bug fix.
Add tests for it. This is important so I don't break it in a future version unintentionally.
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
Send me a pull request. Bonus points for topic branches.
This work is essentially a forked version of delayed_job_mailer (github.com/andersondias/delayed_job_mailer) by Anderson Dias (which in turn was inspired by Alexander Lang's workling_mailer). Enhanced and modified to work with Resque by Nick Plante.