Post by Peter Cooper on June 4th, 2006
Generic ActionMailers make Rails e-mails easy

- The ease of PHP with the power of Ruby
- HAML: A new view template language for Rails
- Pre-processing / normalizing parameters in Rails


A few months ago I was getting fed up of having to create new ActionMailers from scratch on my Rails applications, so I decided to come up with a 'generic' way to cover all the bases. Instead of creating multiple mailers, you create a single mailer and append generic methods. The content goes to the regular RHTML files and you send through whatever you want from your controllers. See Simplifying ActionMailer development in Ruby on Rails. There's probably a lot that could be done to it now, but it works great for me.
An example ActionMailer class:
class Mailer < ActionMailer::Base helper ActionView::Helpers::UrlHelper def generic_mailer(options) @recipients = options[:recipients] || "me@privacy.net" @from = options[:from] || "me@privacy.net" @cc = options[:cc] || "" @bcc = options[:bcc] || "" @subject = options[:subject] || "" @body = options[:body] || {} @headers = options[:headers] || {} @charset = options[:charset] || "utf-8" end # Create placeholders for whichever e-mails you need to deal with. # Override mail elements where necessary def contact_us(options) self.generic_mailer(options) end ... end
An example delivery call from a controller:
Mailer.deliver_contact_us( :recipients => "x@x.com", :body => { :name => params[:name], :phone => params[:phone], :email => params[:email], :message => params[:message] }, :from => "y@y.com" )

Click here to add on del.icio.us








