【Rails6】Action mailerでメール送信までを解説してみる。(MailHogも使うよ)

2 min read読了の目安(約1900字

はじめに

今回は、Action mailerによってアプリケーションからメールを送信する流れまでを解説していきます。

またAction mailerを最低限に絞って解説していくので、Railsの他の機能は解説しません🙇‍♂️

Action mailerでメール送信する

【1】MailHogの導入

MailHogを使うことで開発環境におけるメール送受信の確認をすることができます。

Railsではletter_openerというgemが有名ですがsprockets環境でないと導入できないのです。
つまり、sprockets環境出なかったり、RailsAPIモードの場合は使うことができません。(間違っている場合は、コメントしてください🙇‍♂️)

そこで、MailHogを採用します。MailHogは開発環境のDocker-composeに下記のように書くことで手軽に導入することができます!!

docker-compose.yml

mailhog:
  image: mailhog/mailhog:v1.0.0
  ports:
    - "8025:8025"

あとは、http://localhost:8025/でUI上でメールが正しく送られているか確認することができます。便利ですね!

【2】設定ファイルを編集

config/environments/development.rbで下記のコードを記述してください。action_mailerに必要な設定です。

とりあえず、開発環境だけしておきます。

config/environments/development.rb

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: 'mailhog', port: 1025 }

【3】メーラーを生成

下記のコマンドでmailerを作成することができます。

rails g mailer UserMailer

mailerとはRailsのコントローラーとほぼ一緒だと考えてもいいかもしれません。

【4】メール送信処理を記述

app/mailers/user_mailer.rbにメールを送信する処理を書いていきます。

class UserMailer < ApplicationMailer
  def new_registration_email(user)
    @user = user
    mail subject: '新規アカウント登録されました', to: @user.email
  end
end

今回は、仮に新規会員登録のタイミングでメールを送信することを想定しています。

【5】view以下にメール本文を書いていく。

app/views/user_mailer/new_registration_email.erbに実際に送られるメールの本文を記述していきます。

<%= @user.name %> 様

会員登録が完了しました。
URLはこちらです。
<%= user_url(@user) %>

【6】任意の箇所でメソッドを走らせる。

UserMailer.new_registration_email(@user).deliver

上記のように記述することで、メールを送信できるようになります。下記はUserがCreateされるタイミングでメールを送信しています。

class User < ApplicationRecord
  # 略
  after_create :send_email_for_new_registration

  private

  def send_email_for_new_registration
    UserMailer.new_registration_email(self).deliver
  end
end

最後に

駆け足でしたが、以上です!

簡単に実装できてしまいましたね。すごい。。。

ではでは🙌