メール送信機能とか難しそう、、、と思う方もいれませんが、とっても簡単です。
「Action Mailer」というgemを使用し、メール送信機能を実装したので、「Action Mailer」を使ったメール送信機能の実装手順をなるべく分かりやすく、まとめようと思います。
Contents
公式
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
ちゃんとメールが送信されました。
関連
Railsの環境変数管理gem、dotenvの使い方徹底解説
Rails 初めてのAPI作成 1時間でとりあえず動くまで!!