Reinvent Yourself

技術メモや日々思っていることなど

RailsでHerokuのSendGridアドオンを使ってみる

はじめに

HerokuのSendGridアドオンを、Rails+Action Mailerで使ってみる。

環境

Ruby 2.4.3
Rails 5.1.4

メーラーを作成する

Action Mailerを使ってみる。下記サイトを参考に進める。

railsguides.jp

メーラーを生成

% bin/rails generate mailer UserMailer
      create  app/mailers/user_mailer.rb
      invoke  erb
      create    app/views/user_mailer

中身を編集する

app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
  default from: 'notifications@example.com'

  def welcome_email(user)
    @user = user
    @url = 'http://example.com/login'
    mail(to: @user.email, subject: 'welcome to My Awesome Site')
  end
end

ビューファイルを作成する。

% touch app/views/user_mailer/welcome_email.html.erb 
app/views/user_mailer/welcome_email.html.erb
<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
  </head>
  <body>
    <h1><%= @user.name %>様、example.comへようこそ。</h1>
    <p>
      example.comへのサインアップが成功しました。
      your username is: <%= @user.login %>.<br>
    </p>
    <p>
      このサイトにログインするには、<%= @url %>をクリックしてください。
    </p>
    <p>ご入会ありがとうございます。どうぞお楽しみくださいませ。</p>
  </body>
</html>

テキスト版を作る

% touch app/views/user_mailer/welcome_email.text.erb
<%= @user.name %>様、example.comへようこそ。
==============================================

example.comへのサインアップが成功しました。ユーザー名は「<%= @user.login %>」です。

このサイトにログインするには、<%= @url %>をクリックしてください。

本サイトにユーザー登録いただきありがとうございます。

ユーザを生成する

% bin/rails generate scaffold user name email login
% bin/rails db:migrate
app/controllers/users_controller.rb

UserMailer.welcome_email(@user).deliver_laterを追加する。

  # POST /users
  # POST /users.json
  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        UserMailer.welcome_email(@user).deliver_later # <- 追加

        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

SendGridアドオンをプロビジョニングする

下記サイトを参考に進める。 devcenter.heroku.com

HerokuコマンドでSendGridを追加

% heroku addons:create sendgrid:starter
Creating sendgrid:starter on ⬢ xxxx_app_name_xxxx... free
Created xxxx_app_name_xxxx as SENDGRID_PASSWORD, SENDGRID_USERNAME
Use heroku addons:docs sendgrid to view documentation

SendGridのAPI_KEYを生成する

「Create API Key」をクリックする。 f:id:sprink:20180228185711p:plain

API Key Name」にアプリケーション名を入力後「Full Access」を選択して、「Create & View」をクリックする。 f:id:sprink:20180228185721p:plain

赤枠にキーが表示されるので控えておく。 f:id:sprink:20180228185731p:plain

SendGridにAPI_KEYをセットする

% heroku config:set SENDGRID_API_KEY=xxxx_api_key_xxxx
Setting SENDGRID_API_KEY and restarting ⬢ xxxx_app_name_xxxx... done, v13
SENDGRID_API_KEY: xxxx_api_key_xxxx

production.rbにActionMailerの設定をする

config/environments/production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'herokuapp.com',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
% heroku run rake db:migrate

ユーザページへアクセスする

https://xxxx_app_name_xxxx.herokuapp.com/users」にアクセスする。 f:id:sprink:20180228065518p:plain

ユーザを登録する

Emailに自分のメールアドレスを設定する。 f:id:sprink:20180228184420p:plain

メールが送られてくる

f:id:sprink:20180228065315p:plain