rajat_474
rajat_474

Reputation: 348

Email could not sent using Ruby on Rails 3?

I am trying to send one email through action mailer using ROR. But it can not sent even if it is not showing any error.I am explaining my codes below .Please check these and let me to know where i did mistake and what might be the possibility solutions.

views/users/_form.html.erb:

<%= form_for(@user) do |f| %>
  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% @user.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :email %><br />
    <%= f.text_field :email %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

views/user_mailer/registration_confirmation.html.erb:

Thank you for registering! 

controller/users_controller.rb

class UsersController < ApplicationController
  # GET /users
  # GET /users.json
  def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @users }
    end
  end

  # GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end

  # GET /users/new
  # GET /users/new.json
  def new
    @user = User.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @user }
    end
  end

  # GET /users/1/edit
  def edit
    @user = User.find(params[:id])
  end

  # POST /users
  # POST /users.json
  def create
    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
        UserMailer.registration_confirmation(@user).deliver  
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render json: @user, status: :created, location: @user }
      else
        format.html { render action: "new" }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /users/1
  # PUT /users/1.json
  def update
    @user = User.find(params[:id])

    respond_to do |format|
      if @user.update_attributes(params[:user])
        format.html { redirect_to @user, notice: 'User was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /users/1
  # DELETE /users/1.json
  def destroy
    @user = User.find(params[:id])
    @user.destroy

    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
    end
  end
end

mailers/user_mailer.rb

class UserMailer < ActionMailer::Base
  default from: "[email protected]"
  def registration_confirmation(user)  
    mail(:to => user.email, :subject => "Registered")  
  end  
end

config/initializers/setup_mail.rb

ActionMailer::Base.smtp_settings = {  
  :address              => "smtp.gmail.com",  
  :port                 => 587,  
  :domain               => "gmail.com",  
  :user_name            => "[email protected]",  
  :password             => "XXXXXXX",  
  :authentication       => "plain",  
  :enable_starttls_auto => true  
}  

Upvotes: 0

Views: 31

Answers (1)

Aetherus
Aetherus

Reputation: 8898

In your config/environments/<RAILS_ENV>.rb, alter or add the following configuration, and rerun your test:

config.action_mailer.delivery_method = :file
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true

With this configuration, mails will not be actually delivered thru SMTP, but will be stored in tmp/mails/. If no error is raised, then check your SMTP settings.

Upvotes: 1

Related Questions