Uploading File

Action Mailer is the Rails component that enables applications to send and receive e-mail. In this chapter we will see how to send an email using Rails. So lets start with creating a emails project using following command.

C:\ruby\> rails emails

This will create required framework to proceed. Now we will start with configuring Action Mailer.

Action Mailer – Configuration

Following are the steps you have to follow to complete your configuration before proceeding with actual work:

Go into config folder of your emails project and open environment.rb file and add the following line at the bottom of this file.

ActionMailer::Base.delivery_method = :smtp

This tells ActionMailer that you want to user SMTP server. You can also set it to be :sendmail if you are using a Unix-based operating system such as Mac OS X or Linux.

Add the following lines of code to the bottom of your environment.rb as well.

ActionMailer::Base.server_settings = {
   :address => “smtp.yourdomain.com”,
   :port => 25,
   :domain => “yourdomain.com”,
   :authentication => :login,
   :user_name => “username”,
   :password => “password”,
For the above smtp info i am using google smtp details. For more information on the smtp see my old post.

Replace each hash value with proper settings for your Simple Mail Transfer Protocol (SMTP) server. You can take this information from your Internet Service Provider if you already don’t know. You don’t need to change port number 25 and authentication type if you are using standard SMTP server.

You may also change the default email message format. If you prefer to send email in HTML instead of plain text format, add the following line to config/environment.rb as well:

ActionMailer::Base.default_content_type = “text/html”

ActionMailer::Base.default_content_type could be set to “text/plain”, “text/html”, and “text/enriched”. The default value is “text/plain”.

Next step will be to create a mailer

Generate a mailer:
Use the following command to generate a mailer as follows:

C:\ruby\> cd emails
C:\ruby\emails> ruby script/generate mailer Emailer

This will create a file emailer.rb in app\models directory. Check the content of this file is as follows:

class Emailer < ActionMailer::Base


Let’s create one method as follows.

class Emailer < ActionMailer::Base
   def contact(recipient, subject, message, sent_at = Time.now)
      @subject = subject
      @recipients = recipient
      @from =
      @sent_on = sent_at
   @body[“title”] = ‘This is title’
     @body[“email”] =
      @body[“message”] = message
      @headers = {}

The contact method has four parameters a recipient, subject, message and a sent_at, which defines when the e-mail is sent. The method also defines six standard parameters that are a part of every ActionMailer method:

  • subject defines the e-mail subject.
  • body is a Ruby hash that contains values with which you can populate the mail template. You created three key-value pairs: title, email, and message
  • recipients is a list of the people to whom the message is being sent.
  • from defines who the e-mail is from.
  • sent_on takes the sent_at parameter and sets the timestamp of the e-mail.
  • headers is another hash that enables you to modify the e-mail headers. For example, you can set the MIME type of the e-mail if you want to send either plain text or HTML e-mail.

Now we will create a mailer template which is just text with standard Rails <%= %> placeholders scattered throughout.

Put following code in app/views/contact.rhtml file


You are having one email message from <%= @email %> with a tilte

<%= @title %>
and following is the message:
<%= @message %>


Next we will create a controller for this application as follows:

C:\ruby\emails> ruby script/generate controller Emailer

Now lets define a controller method in emailer_controller.rb which will call Model method to send actual email as follows:

class EmailerController < ApplicationController
   def sendmail
      email = @params[“email”]
   recipient = email[“recipient”]
   subject = email[“subject”]
   message = email[“message”]
      Emailer.deliver_contact(recipient, subject, message)
      return if request.xhr?
      render :text => ‘Message sent successfully’


To deliver e-mail using the mailer’s contact method, you have to add deliver_ to the beginning of the method name. You add a return if request.xhr? so that you can escape to Rails Java Script (RJS) if the browser does not support JavaScript and then tell the method to render a text message.

You are almost done except to prepare a screen from where you will get user information to send email. So lets define one screen method index in controller and corresponding view:

Add following code in emailer_controller.rb file

   def index
      render :file => ‘app\views\emailer\index.rhtml’

Now let’s define our view in app\views\emails\index.rhtml

<h1>Send Email</h1>
<%= start_form_tag :action => ‘sendmail’ %>
<p><label for=”email_subject”>Subject</label>:
<%= text_field ’email’, ‘subject’ %></p>
<p><label for=”email_recipient”>Recipient</label>:
<%= text_field ’email’, ‘recipient’ %></p>
<p><label for=”email_message”>Message</label><br/>
<%= text_area ’email’, ‘message’ %></p>
<%= submit_tag “Send” %>
<%= end_form_tag %>

Now test your application by using This displays following screen and by using this screen now you will be able to send your message to anybody.


This will send your message and will display text message that “Message sent successfully”

For more information on how to send email using Rails, look at ActionMailer.

Orginal Post From:


Running Successfully the above code in your ruby server the Action Mailer extension should enble already. Enabling the Action Mailer please see the previous post.

1 Comment

  1. June 29, 2009 at 8:17 am

    […] Action Mailer is the Rails component that enables applications to send and receive e-mail. In this chapter we will see how to send an email using Rails. So lets start with creating a emails project using following command View original here: Uploading File […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: