やりたいこと
- controllerから呼び出してactionmailerでメール送信
全体像
初期設定
- application_mailerにてmailアドレスなどの設定
- (gmail使う場合)gmailの設定
mailerの作成
-
rails generate mailer
コマンドでmailer作成 - viewにテキスト本文作成
- メソッドを呼び出す
mailerの作成方法
$ bin/rails generate mailer UserMailer
class ApplicationMailer < ActionMailer::Base
default from: "[email protected]"
layout 'mailer'
end
class UserMailer < ApplicationMailer
end
mailerはcontrollerと似ていて上記コマンドでview(メール文面)もテストも生成される。このmailerで使えるオプションは下記に
ちなみにbin/railsコマンドについても調べてみた。
Railsはプロジェクトルートの bin ディレクトリにある rails ファイル(実行可能ファイル)を優先的に起動する仕様になっているからです。
railsコマンドだとbin/を付ける必要がなくてrakeコマンドだとある。
configの設定
configの記述箇所
cofig/environments/○○.rbで書くかconfig/initializers/の2パターンある。
cofig/environments/○○.rbはそのfileの環境にのみ適用したい時、config/initializers/はどの環境でも使いたいときに使用する。
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
}
smtpモードでの設定情報
- address => SMTPサーバーのホスト名
- port => SMTPサーバーのポート番号
- domain => 使うgmailアカウントのドメイン。もし無料アカウントから転送で使っていたら無料アカウントのドメイン(gmailなど)。有料だった場合独自ドメイン。
- user_name => メール送信に使用するgmailのアカウント
- password => メール送信に使用するgmailのパスワード
- authentication => 認証方法
- enable_starttls_auto => メールの送信にTLS認証を使用するか
引用:https://qiita.com/Yama-to/items/823baf26bba3193712ea
パスワードは下記の方法でアプリパスワードを取得しないといけない
メール本文をmailerviewで作成
app/views/user_mailer/ディレクトリでmailerでセットされたインスタンス変数名.html.erbというファイルを作成するとメール本文を編集できる。.text.erbで作るとテキストメールになる。
gmailの設定
gmailから送信する場合以下の作業をしないといけない
- 2段階認証を有効にする
- アプリパスワードの設定
- 端末は適当で良し
- 転送の設定をしている場合、設定のアカウントをちゃんと変更しておく
controllerの記述
NotificationMailer.send_oubo_notification("なんか引数あったらここに").deliver_later
細かい注意点
- actionmailerはactivejpbで非同期で行なわれるのでユーザーは完了を待たなくていい。
- mailのpreviewがみれる( https://railsguides.jp/action_mailer_basics.html#%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC )