RailsでHerokuのSendGridアドオンを使ってみる
はじめに
HerokuのSendGridアドオンを、Rails+Action Mailerで使ってみる。
環境
メーラーを作成する
Action Mailerを使ってみる。下記サイトを参考に進める。
メーラーを生成
% 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」をクリックする。
「API Key Name」にアプリケーション名を入力後「Full Access」を選択して、「Create & View」をクリックする。
赤枠にキーが表示されるので控えておく。
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」にアクセスする。
ユーザを登録する
Emailに自分のメールアドレスを設定する。
メールが送られてくる