覚書: Heroku SendGridでメール送信

外観

環境
macOS 10.15.4
Ruby 2.7.1
Rails 6.0.3.1
Yarn 1.22.4
Node 13.12.0

参照
Action Mailer の基礎 - Railsガイド
SendGrid | Heroku Dev Center

リポジトリ
https://github.com/usutani/try_action_mailer_heroku

アプリの作成

gem list pg
rails new -T --skip-active-storage -d postgresql try_action_mailer_heroku
cd try_action_mailer_heroku

bin/rails g scaffold User name email:uniq
bin/rails db:create
bin/rails db:migrate

config/routes.rb

Rails.application.routes.draw do
  resources :users
  root to: 'users#index'
end

bin/rails generate mailer UserMailer

app/mailers/user_mailer.rb

class UserMailer < ApplicationMailer
  default from: 'notifications@example.com'

 def welcome_email
    @user = params[:user]
    @url  = 'http://example.com/login'
    mail(to: @user.email, subject: '私の素敵なサイトへようこそ')
  end
end

touch 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.name %>.<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.name %>」です。

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

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

app/controllers/users_controller.rb
UserMailer.with...を追加する。

  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        UserMailer.with(user: @user).welcome_email.deliver_later
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else

config/environments/production.rb

  # Setup the mailer config
  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 => 'yourdomain.com',
    :address => 'smtp.sendgrid.net',
    :port => 587,
    :authentication => :plain,
    :enable_starttls_auto => true
  }

デプロイ

heroku login
heroku create <APP_NAME>

heroku addons:create sendgrid:starter
heroku addons:open sendgrid

画像1

画像2

git push heroku <BRABCH_NAME>:master
heroku run rake db:migrate

heroku open
heroku logs --tail

# heroku addons:destroy sendgrid
# heroku apps:destroy

以上です。

この記事が気に入ったらサポートをしてみませんか?