LoginSignup
3
2

More than 5 years have passed since last update.

ActionMailerを使ってメールを送信する

Last updated at Posted at 2017-07-10

既に実装されていたメールの一部を別のメイラーに移す機会があったので、全体的に学び直した(主にRails Guide)ので備忘録的にメモ。
なお、メールを送るための設定はすでにされていたので割愛。

ActionMailerの特徴

  • ActionMailer::Baseを継承している
  • app/mailersに配置される
  • app/viewsにあるビューと結びつく

メイラーの作成

コマンドでメイラーを作成する
rails gコマンドでメイラーに必要なファイルを作成する。

$ rails g mailer UserMailer

メイラーの編集

メイラーを編集することで、送信するメールを設定できる。また、誰にメールを送るかや、メールの送信元のアドレス、メールの題も設定できる。

send_mailというメソッドでメールを送るようにしてみる。
使っているものは以下。

  • default
    • ハッシュを渡すことができ、全メールで適用されるデフォルト値を決める。:formは送信元のメールアドレスを設定している。
  • mail
    • メソッド内それぞれの設定。メールの題や誰に送るかを設定している。

インスタンス変数を定義することで、メールの文面内で使用できるようなる。

class UserMailer < ApplicationMailer::Base
  default from: 'sender@mail.com'  # デフォルトの送信元のメールアドレス

  def send_mail(user)
    @user = user
    mail(to: @user.email, subject: 'メールのタイトル')
  end
end

メイラービューを作成

app/views/user_mailer/ディレクトリでメソッド名と同じsend_mail.html.erbというファイルを作成する。
HTMLでフォーマットされたメールテンプレートになる。

<!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
  </head>
  <body>
    <h1><%= @user.name %>様、example.comへようこそ。</h1>
      <p>
      example.comへのサインアップが成功しました。
      your username is: <%= @user.login %>.<br>
    </p>
    <p>ご入会ありがとうございます。どうぞお楽しみくださいませ。</p>
  </body>
</html>

HTMLフォーマットのメールを受け取らない人のために、テキストメールも作成しておく。
app/views/user_mailer/ディレクトリでsend_mail.text.erbというファイルを作成する。

<%= @user.name %>様、example.comへようこそ。
===============================================

example.comへのサインアップが成功しました。ユーザー名は「<%= @user.login %>」です。

本サイトにユーザー登録いただきありがとうございます。

メイラーを呼び出す

コントローラやモデルなどからメイラーを呼び出す。

UserMailer.send_mail(@user).deliver_later

ActionMailerはActive Jobと統合されているので、Webのリクエスト/レスポンスサイクルの外で非同期にメールを送信できる。

メイラーの呼び出し

メイラーのメソッドはActionMailer::MessageDeliveryオブジェクトを返り値として返す。
ActionMailer::MessageDeliveryオブジェクトは、そのメール自身が送信対象であることをdeliver_nowやdeliver_laterに伝える。
ActionMailer::MessageDeliveryオブジェクトは、Mail::Messageをラップしている。
内部のMail::Messageオブジェクトの表示や変更を行いたい場合は、ActionMailler::MessageDeliveryオブジェクトのmessageメソッドにアクセスする。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2