Rails 2.0 Email (ActionMailer) Example

Hi,

Does anybody have a simple Rails 2.1 working example of creating an email from a simple Web form and sending it via ActionMailer? Most of the examples I've found so far all seem to be Rails 1.x based and don't work with Rails 2.x.

Best Regards,

Carl

ruby script/generate mailer customermailer

models/customer_mail.rb:

class CustomerMailer < ActionMailer::Base

  def welcome_message(sent_at = Time.now)     @subject = 'CustomerMailer#welcome_message'     @body = {}     @recipients = ''     @from = ''     @sent_on = sent_at     @headers = {}     @body["email"] = ''   end end

views/customer_mailer/welcome_message.html.erb

This will be your email message

and now send it with this:

customer_mail = CustomerMailer.create_welcome_message CustomerMailer.deliver(customer_mail)

Thanks for the reply, I assume I need to define some configuration within the environment.rb for this to work?

Regrds,

Carl

Hiemdull, I find this thread wonderfully useful and interesting...is there a chance you could show an example of the views/customer_mailer/ welcome_message.html.erb ? Is customer_mailer a controller also? I am grateful for a comprehensive example. Thank you, Kathleen

Put this in the environment.rb file(I use the google smtp server so I had to install the action_mailer_tls plugin):

  config.action_mailer.raise_delivery_errors = false   config.action_mailer.delivery_method = :smtp   config.action_mailer.default_content_type = "text/html"   config.action_mailer.default_url_options = { :host => "domainname.com" }   config.action_mailer.smtp_settings = {     :tls => true,     :address => "smtp.gmail.com",     :port => 587,     :domain => "domainname.com",     :authentication => :plain,     :user_name => "username",     :password => "password"   }

Here is a snip from new_question_message.html.erb I have:

Question from..: <%= @question.name %><br /> Email..........: <%= @question.email %><br /> <% if @question.phonenumber -%> Phonenumber....: <%= @question.phonenumber %><br /> <% end -%> Subject........: <%= @question.subject %><br /> =========================================<br /> <%= @question.description %><br />

Then when I send this I have to pass the object:

mail = CustomerMailer.create_new_question_message(@question) CustomerMailer.deliver(mail)

customer_mailer is not a controller its a actionmailer and it lives in the /app/models directory

When you use the ruby script/generate mailer customermailer command it creates that for you.

So the steps would be:

- Create the mailer with generate mailer - Add a mailer action like welcome_message - Setup your environment.rb with the correct smtp setup - add the deliver action to your action in your controller (Imprtant is to use CustomerMailer.create_ <- )

That should be all you need.

If you don't want to wait for the email to be sent (Sometimes the app waits a second or 3 to send an email which does not make for a snappy interface) Watch this #128 Starling and Workling - RailsCasts Starling and Workling works great to offload the email delivery.