Action Mailer allows you to send email from your application using a mailer
model and views.
This tutorial is
about how to send an email using gmail free service in Ruby on Rails 2.3.9, for
versions higher than this refer rails guides .
Creating Demo project
rails mail_demo –d mysql
Creating a User model
Ruby script/generate scaffold User name:string email:string content:string
Creating a Mailer model
Ruby script/generate mailer user_mailer
Setting up the development.rb for configuring application settings to access mail smtp server
In development.rb
config.action_mailer.delivery_method = :smtpconfig.action_mailer.raise_delivery_errors = trueconfig.action_mailer.smtp_settings = {:enable_starttls_auto => true,:address => 'smtp.gmail.com',:port => 587,:domain => 'your.domain.com',:authentication => :login,:content_type => "text/html",:user_name => your full username example xyz@gmail.com',:password => 'password'}
Remember
these are the basic settings needed to send mails from gmail ,other server may
have different settings .
Creating the mailer
Now
we will write the method in user_mailer model to send the mail .Remember in the
mailer model
def send_email(user)recipients user.emailfrom "webmaster@example.com"subject "Thank you for Registering"part :content_type => "text/html",:body => render_message("registration_confirmation", :user => user)end
The
from field can be your own or your domains email address. Please check if the
from for field has invalid email the user will not be able to reply .
Creating Email Template
Now
we will create a view which would form a the email template .It is named as
same as the method in the model user_mailer ie. Send_email.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css" media="screen">h3 { color: #f00; }ul { list-style: none; }</style></head><body><div><h2 id = "banner">Your account signup details are below</h2></div><ul><br /><br /><li><h2>Name: <b><%= @user.name %></b> </h2></li><li>Login: <%= @user.email %></li><br /><br /><li>Image: <%= image_tag 'rails.png' %></li><br /><br /><li>Content: <%= @user.content %></li></ul></body></html>
In
the end add a line to the create method of the Users_controller
UserMailer.deliver_send_email(@user)
The
method is referred to as deliver_send_email because rails appends it to a
mailer method.
Now
run the server and try creating a new user . The email is sent to the address
the user enters for the new record.
Hi Ashish ,
ReplyDeleteThanks for the information .
I tried to use action mailer in a rails 3 application.
Did all that was required .
But the app was not sending an email on User generation as per requirement.
You can check the code at :
https://github.com/karanarora/action_mailer_usage
If you could provide a solution .
Thanks
Karan
So karan i have a new article for you .. please have a look and revert back
ReplyDeleteMost ISPs monitor and measure the amount of emails that are coming from your mail server. These ISPs will throttle your email delivery rate back if they detect large amounts of mail being sent from your domain or mail server. It is important to send your mailings in small batches that will not trigger the ISPs to temporarily or permanently block emails from your domain.
ReplyDeleteEmail Delivery Service