views:

161

answers:

3

I want to implement a reliable mailing system with Ruby on Rails that sends emails in the background as sending email sometimes takes like 10 seconds or more so I don't want the user to wait. Some ideas I thought of:

  1. Write to a table in DB a have a background process that go over and send email (concern: potential many reads/writes to DB slows down my application)

  2. Messaging Queue background process / Rake task (concern: if server crashes queued mails will be lost also might eat up a lot of memory if many emails)

I was wondering if you a know of a good solution that provides a balance between reliability and performance.

+1  A: 

Have you looked at the mail-queue plugin?

http://code.google.com/p/mail-queue/

The docs seem to suggest it stores the mails in a DB table, thus avoiding #2 at least.

Joost Schuur
+2  A: 

I think Starling and Workling will be able to assist you =) Watch this railscast: http://railscasts.com/episodes/128-starling-and-workling

Staelen
A: 

You can implement the feature or rely on external services.

I have been using PostageApp for the last 2 months and I'm really happy with it. An other solution is Postmark.

Otherwise, if you want to code it, first you need a queue system. For Rails, you can use DelayedJob or Resque. Sending emails in the background is probably the most simple solution, the "problem" is dealing with failures and retry.

Simone Carletti