Using Devise and SendGrid to send confirmation email on rails app

First make normal rails app with devise user model.
$ rails new awesome-app
This will create new app$ cd awesome-app
It will change the directory to our new project
Setup Gemfile.
Add
gem 'devise'
andgem 'sendgrid-ruby'
to the Gemfilefinally run
$ bundle install
on terminal
Setup devise
$ rails generate devise:install
it will create config/initializers/devise.rb and config/locales/devise.en.yml file and follow the instruction generated by above commandNow generate devise user model with
$ rails generate devise User
then go to app/models/user.rb and make this file look like this:
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :confirmable end
Uncomment the Confirmable section of migration file located on the app/db/migrate
class DeviseCreateUsers < ActiveRecord::Migration[7.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
# t.integer :sign_in_count, default: 0, null: false
# t.datetime :current_sign_in_at
# t.datetime :last_sign_in_at
# t.string :current_sign_in_ip
# t.string :last_sign_in_ip
# Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
Then run $ rails db:migrate
Set up SendGrid
- Create account on SendGrid
- Set up a sender identity on SendGrid by clicking this link: https://app.sendgrid.com/settings/sender_auth/senders
- Create your API key by following this link: https://app.sendgrid.com/settings/api_keys
add
gem 'dotenv-rails'
on development and test group on gem file and run$ bundle install
create .env file in your project root and add following line inside it
SENDGRID_API_KEY = 'YOUR API KEY'
Then, modify this Devise config to use your SendGrid sender identity:
# config/initializers/devise.rb config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
Set up Action Mailer
create config/initializers/action_mailer.rb file and add following code
# config/initializers/action_mailer.rb
ActionMailer::Base.smtp_settings = {
user_name: "apikey",
password: ENV['SENDGRID_API_KEY'],
domain: "your-domain.com",
address: "smtp.sendgrid.net",
port: 587,
authentication: :plain,
enable_starttls_auto: true
}
Now let Test it
run the server on local
$ rails server
go to link http://localhost:3000/users/sign_up on browser
After signing up we will get the confirmation email.
Subscribe to my newsletter
Read articles from Ankit Pariyar directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
