Action MailerはRailsでのメール送信機能を提供します。
メイラーを作る。
下記のようにメイラーを作成するためのジェネレータが用意されています。
1 |
rails g mailer メイラー名 |
するとapp/mailersにApplicationMailerを継承したメイラークラスが作成されています。
1 2 |
class メイラー名 < ApplicationMailer end |
メール送信用のメソッドを作成
引数のモデル名は、特に必須ではなくモデルの中に含まれるemailアドレス宛を設定したりメール本文に可変的な内容を埋め込んだりという用途等に使われたりします。
1 2 3 4 5 6 7 8 9 10 |
class メイラー名 < ApplicationMailer def 任意のメソッド名(モデル名) @モデル名 = モデル名 mail( subject: 'メールタイトル', to: '宛先メールアドレス', from: '送信元メールアドレス' ) end end |
fromはどのメールも同じにしたいということが普通だと思いますので下記のように指定することも多いです。
1 2 3 4 |
class TaskMailer < ApplicationMailer default from: '送信元メールアドレス' ‥ end |
テンプレートを作成する。
テンプレートには2種類あります。どちらかの形式を指定してメール送信することも可能ですが、特に形式を指定しなかった場合はマルチパート(基本はHTMLで、環境的に無理であればtext形式)のメール送信になります。
- テキスト形式
- HTML形式
テキスト形式
下記の場所にファイルを新規作成して
1 |
app/views/メイラークラスに定義した任意のメソッド名.text.slim |
HTML形式
1 |
app/views/メイラークラスに定義した任意のメソッド名.html.slim |
メール送信処理を記述する。(コントローラーにて)
下記のメソッドを実行します。
1 |
メーラー名.メソッド(@モデル).deliver_now |
deliver_now
即時送信するメソッド
deliver_later
Active Jobと連携して非同期にメール送信を行えるメソッドです。例えば下記のように記述すれば3分後にメールを送信することができます。
1 |
メーラー名.メソッド(@モデル).deliver_later(wait: 3.minutes) |
動作確認
まずはmailcatcher(SMTPサーバを立てて送信されたメールをブラウザで確認できる機能)というgemが便利です。
1 |
gem install mailcatcher |
次にdevelopment環境向けの設定を行います。config/environments/production.rbに下記設定を追記します。
1 2 3 4 |
# Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false config.action_mailer.delivery_method = :smtp ★追加 config.action_mailer.smtp_settings = { address: '127.0.0.1', port: 1025} ★追加 |
Railsのサーバーを再起動し、下記コマンドを実行してmailcatcherを起動します。
1 |
mailcatcher |
メール送信機能を実際にRailsで動かした後「http://127.0.0.1:1080」にアクセスすると下記のようにhtml形式とtext形式双方のテンプレートが想定どおり送信されているか確認できます。(仮に存在していないメールアドレス宛でも送信が可能です。)
この記事へのコメントはありません。