Ruby on Rails「Action Mailer」でgmail送信機能を実装

 

メール送信機能とか難しそう、、、と思う方もいれませんが、とっても簡単です。

「Action  Mailer」というgemを使用し、メール送信機能を実装したので、「Action Mailer」を使ったメール送信機能の実装手順をなるべく分かりやすく、まとめようと思います。

公式

Action Mailerの基礎(https://railsguides.jp/action_mailer_basics.html)

<スポンサードリンク>

実装手順

メール送信に必要なステップは、送信するだけならたった3ステップです。

1. メール送信に必要なファイルを生成する。

メール送信に必要なファイル群はコマンドで生成することができます。

% rails g mailer UserMailer
Running via Spring preloader in process 1874
      create  app/mailers/user_mailer.rb
      invoke  erb
      create    app/views/user_mailer
      invoke  test_unit
      create    test/mailers/user_mailer_test.rb
      create    test/mailers/previews/user_mailer_preview.rb

g(generate) mailerコマンドを実行すると、メール送信に必要なファイルを自動生成してくれます。
例えば今回は、ユーザー宛のメール送信機能を実装するにあたって、app/mailer/user_mailer.rbというファイルと、実際のメールの本文を記載するapp/views/user_mailerが作成されています。

2. 設定ファイルを整備

設定ファイルにgmailの設定を追加します。

config/environments/development.rb

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: "gmail.com",
  authentication: "plain",
  enable_starttls_auto: true,
  user_name: ENV['EMAIL_ADDRESS'],
  password: ENV['EMAIL_PASSWORD']
}

user_nameは、xxxx@gmail.comで、passwordは、アプリケーションパスワードを設定します。
今回は環境変数から取得するように実装しました。

アプリケーションパスワードに関しては、作成、設定したことがなければ、下記の記事が参考になると思います。
アプリパスワードの生成と利用方法

3.メール送信に必要なメソッドなどを実装

次にメールを送信するのに必要なメソッドと、メールの本文を実装します。

メールの設定を行うメソッドと、

% cat  app/mailers/user_mailer.rb

class UserMailer < ApplicationMailer
  default from: 'notifications@example.com'
 
  def report(user)
    @user = user
    @url  = 'http://example.com/login'
    mail(to: @user.email, subject: 'レポート')
  end
end

メールを送信するメソッド

% cat app/models/user.rb 

class User < ApplicationRecord
  def self.send_report
    UserMailer.report(User.first).deliver_now
  end
end

メールの本文の3つを実装します。
メールの本文を記述するファイルは、view/xxxmailler/の直下に配置し、送信するメソッド(今回はreport)にファイル名を合わせなければいけないというルールがあります。

% cat app/views/user_mailer/report.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
  </head>
  <body>
    <h1><%= @user.name %>様、メール送信テストです。</h1>
  </body>
</html>

 

4. 送信されることをテストしてみます

% rails runner -e development User.send_report

ちゃんとメールが送信されました。

関連

Ruby on Rails データベース構築設定まとめ

Railsの環境変数管理gem、dotenvの使い方徹底解説

Rails 初めてのAPI作成 1時間でとりあえず動くまで!!

スポンサードリンク



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA