Skip to content

Action mailerのメール送信機能

shunto edited this page Nov 10, 2019 · 4 revisions

使うメールの設定をする

config/initializers/mail.rb

  • production: 本番環境
  • development: 開発環境
  • else: テスト環境 の3つでそれぞれ設定する
if Rails.env.production?
  ActionMailer::Base.delivery_method = :smtp
  ActionMailer::Base.smtp_settings = {
    address: 'smtp.gmail.com',
    domain: 'gmail.com',
    port: 587,
    user_name: 'Gmail のメールアドレス',
    password: 'Gmail のパスワード',
    authentication: 'plain',
    enable_starttls_auto: true
  }
elsif Rails.env.development?
  ActionMailer::Base.delivery_method = :letter_opener
else
  ActionMailer::Base.delivery_method = :test
end

※ 開発環境で行うときはletter-openerを使ったので、gem 'letter-opener' が必要

メーラーを作成する

$ rails g mailer NotificationMailer

メーラーに設定を書く

app/mailers/notification_mailer.rb

class NotificationMailer < ApplicationMailer
  default from: "送信元のアドレス"

  def send_confirm_to_user(contact)
    @contact = contact
    mail(
      subject: "お問い合わせありがとうございました。",            # メールのタイトル
      to: @contact.user.email                                  # 宛先
    ) do |format|
      format.text
    end
  end
end

メールの本文を書く

app/views/notification_mailer/send_confirm_to_user.text.erb

<%= @user.name %> 様

○○への会員登録が完了しました。
マイページはこちら
<%= user_url(@user) %>

実際に処理を走らせるアクションにメール送信処理をさせる

app/controllers/users_controller.rb

if @user.save
  NotificationMailer.send_confirm_to_user(@user).deliver 

※ この処理が終わるまで、以降の処理がされないので、Active_jobを行いたいときは、deliver => deliver_laterに変更する

if @user.save
  NotificationMailer.send_confirm_to_user(@user).deliver_later

※ Gmailアドレス以外からはSMTP通信ができないようになっている