Class: ActionMailer::ARMailer

Inherits:
Base
  • Object
show all
Defined in:
lib/action_mailer/ar_mailer.rb

Overview

Adds sending email through an ActiveRecord table as a delivery method for ActionMailer.

Converting to ActionMailer::ARMailer

Go to your Rails project:

$ cd your_rails_project

Create a new migration:

$ ar_sendmail --create-migration

You’ll need to redirect this into a file. If you want a different name provide the –table-name option.

Create a new model:

$ ar_sendmail --create-model

You’ll need to redirect this into a file. If you want a different name provide the –table-name option.

Change your email classes to inherit from ActionMailer::ARMailer instead of ActionMailer::Base:

--- app/model/emailer.rb.orig   2006-08-10 13:16:33.000000000 -0700
+++ app/model/emailer.rb        2006-08-10 13:16:43.000000000 -0700
@@ -1,4 +1,4 @@
-class Emailer < ActionMailer::Base
+class Emailer < ActionMailer::ARMailer

def comment_notification(comment)
  from comment.author.email

You’ll need to be sure to set the From address for your emails. Something like:

def list_send(recipient)
  from '[email protected]'
  # ...

Edit config/environment.rb and require ar_mailer.rb:

require 'action_mailer/ar_mailer'

Edit config/environments/production.rb and set the delivery agent:

$ grep delivery_method config/environments/production.rb
ActionMailer::Base.delivery_method = :activerecord

Run ar_sendmail:

$ ar_sendmail

You can also run it from cron with -o, or as a daemon with -d.

See ar_sendmail -h for full details.

Alternate Mail Storage

If you want to set the ActiveRecord model that emails will be stored in, see ActionMailer::ARMailer::email_class=

Constant Summary collapse

@@email_class =
Email

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.email_classObject

Current email class for deliveries.



75
76
77
# File 'lib/action_mailer/ar_mailer.rb', line 75

def self.email_class
  @@email_class
end

.email_class=(klass) ⇒ Object

Sets the email class for deliveries.



82
83
84
# File 'lib/action_mailer/ar_mailer.rb', line 82

def self.email_class=(klass)
  @@email_class = klass
end

Instance Method Details

#perform_delivery_activerecord(mail) ⇒ Object

Adds mail to the Email table. Only the first From address for mail is used.



90
91
92
93
94
95
# File 'lib/action_mailer/ar_mailer.rb', line 90

def perform_delivery_activerecord(mail)
  mail.destinations.each do |destination|
    @@email_class.create :mail => mail.encoded, :to => destination,
                         :from => mail.from.first
  end
end