Mass Emailing in Rails

I've seen some discussions already in the mailing list about sending
Mass Emails in Rails, but they've been pretty unsatisfying.

I'm working with a non-profit with a low budget. They'd like to save
money on email communication by building a tool that will allow them
to send out graphic emails through their site. The hitch is that the
web host has an SMTP throttling limit of 50 recipients/blast and 500
recipients/hour. Their mailing list is just over 500 recipients.

Someone suggested I use a combination of BackgrounDrb and ar_mailer to
feed the emails into a database and cycle through a portion of them
every few minutes. But I'm an intermediate Rails developer and I
couldn't make heads or tails of some the documentation on those two
tools -- especially ar_mailer.

Can anybody provide a better solution or a tutorial/walkthrough on
using BackgrounDrb and ar_mailer together?

P.S. The answer is not to BCC everyone on the mailing list.

Hi there,

I’ve successfully implemented ar_mailer, and it works well. All emails get queued into a database table that looks like this:

create_table :emails do |t|
  t.column :from, :string
  t.column :to, :string
  t.column :last_send_attempt, :integer, :default => 0
  t.column :mail, :text
end

To get your emails going into this table, you subclass your mailer classes from ARMailer, like this:

class NotificationMailer < ActionMailer::ARMailer
end

Now, when you tell your rails app to deliver an email, it actually just gets queued into that table.

Now you need some sort of background process to check this table periodically. I handled this by making a little rake task to send out the emails from the queue, like this:

desc “Send queued emails”
task :send_queued_emails => :environment do
Dir.chdir(RAILS_ROOT) # change working directory to rails app root so ar_sendmail will work correctly
ActionMailer::ARSendmail.run
([’-o’])
end

Then I setup a little cron job to run every 15 minutes which runs the rake task and send out the emails…

15,30,45,59 * * * * /usr/bin/rake -f /your/rails/app/current/Rakefile send_queued_emails RAILS_ENV=production >/dev/null 2>&1

Not only that, this domain has all mail sent through GMail servers. Works great.

Hi,

class NotificationMailer < ActionMailer::ARMailer
end

Hi,
could you give some same of NotificationMailer class?

bec'z i have sample of email.rb is:

class Email < ActionMailer::ARMailer
  def testmail
    recipients "mymailaddress@domain.com"
    from "fromaddress@domain.com"
    subject "TEST MAIL SUBJECT"
    body "<br>TEST MAIL MESSAGE"
    content_type "text/html"
  end
end

and i am sending it through controller like:
mail = Email.create_testmail # => a tmail object
Email.deliver(mail)

but error is occurring:
undefined method `create' for Email:Class

and when i run ar_sendmail -o, it throw error like:

Unhandled exception undefined method `destroy_all' for
Email:Class(NoMethodError):

it means it does not consider mail as active record.

please help

could you give some same of NotificationMailer class?

sorry for typo:
could you give some sample of NotificationMailer class?

Hello Rajesh,

I have exactly the same problem. Did you find a solution to this?

Thanks in advance.

marlor

Rajesh Soni wrote: