Oteto Blogのロゴ

【Rails】Action Mailerを使ってメールを送信する方法

Action Mailerとは

Action Mailerは、Railsに標準で提供されているメール送信のためのモジュールです。

手軽かつ簡単にテキストメール、HTMLメールまた添付ファイル付きのメールを送ることができます。

Action Mailerによるメール送信方法

1. Gmailのパスワードを取得

今回は送信元・送信先共にGmailで行います。

Gmailで送信するにはパスワードが必要になるので、そのパスワードを取得していきましょう。ログイン時のパスワードとは別物なので注意してください。

左側にある「セキリュティ」を選択

まずGoogleアカウントにログインし、左側にある「セキリュティ」を選択します。

「2段階認証プロセス」を選択

「2段階認証プロセス」を選択。ここで電話番号やコードを入力し2段階認証を行います。

「アプリ パスワード」という項目が増えるのでそれを選択

2段階認証を終えると「アプリ パスワード」という項目が増えるのでそれを選択します。

アプリとデバイスの選択が求められるのでそれっぽいものを選ぶ

アプリとデバイスの選択が求められるのでそれっぽいものを選ぶと、パスワードが生成されます。

後々使うものなので、そのパスワードをコピーしておいてください。

2. Action Mailerの設定

# メールの設定
config.action_mailer.delivery_method = :smtp
config.action_mailer.raise_delivery_errors = true
config.action_mailer.smtp_settings = {
  address: 'smtp.gmail.com',
  domain: 'gmail.com',
  port: 587,
  user_name: <送信元のメアド>,
  password: <コピーしたパスワード>,
  authentication: 'login',
  enable_starttls_auto: true
}

config/environments/development.rbに、上のように追記します。

指定可能なパラメータ

パラメータ詳細
delivery_methodメールの送信方法を指定
raise_deliveries_errorsメールの送信が失敗した時にエラーを発生させるか
smtp_settings:smtpモードでの設定情報
default_optionsデフォルトのメールヘッダー
interceptors適用するインターセプター
perform_deliveriesdeliverメソッドでメールを送信するか
show_previewsプレビュー機能を有効にするか
sendmail_settings:sendmailモードでの設定情報
file_settingsfileモードでの設定情報

delivery_methodに設定可能な値

オプション詳細
addressホスト名
domainドメイン
portポート番号
user_nameログイン時のユーザー名
passwordログイン時のパスワード
authentication認証方法

3. メーラーを生成

$ rails g mailer ChatMailer

上のコマンドでメーラーを生成します。今回は例としてChatMailerというメーラー名にします。

create app/mailers/chat_mailer.rb invoke erb create app/views/chat_mailer invoke test_unit create test/mailers/chat_mailer_test.rb create test/mailers/previews/chat_mailer_preview.rb

上記のように自動でファイルが作成されればOK。

4. メーラーを編集

class ChatMailer < ApplicationMailer
default from: <メールの送信元>, subject: <メールタイトル>
  def send_mail(user,message)
    @user=user
    @message=message
    mail to: user.email
  end
end
  • defaultメソッドでデフォルトのヘッダー情報を設定
  • send_mailアクションでメール本体を返す

send_mailで呼んでいるmailメソッドは、引数にヘッダー情報を指定することで宛先や本文を指定できます。

指定できるものに関しては下記表を参考にしてください。

項目詳細
to宛先
cc写し
bccブラインドカーボンコピー
subjectタイトル
from送信元
date送信日時
reply_to返信先のメアド
x_priorityx_msmail_priorityメールの重要性
content_typeコンテンツタイプ(text/plain的な)
charset文字コード
parts_order複数形式の順番
mime_versionMIMEの順番

5. メール本文を調整

<%= @user.name %>
_________________________________
【メッセージが届きました】

<%= @message %>

_________________________________

〇〇〇 より

viewsディレクトリの中に先ほど作ったメーラー名のフォルダがあると思うので、その中に<アクション名>.text.erbを作ります。

ビューと同じ要領で、任意のメール本文も書いておきます。

6. メーラーのアクションを呼び出す

ChatMailer.send_mail(@user, @message).deliver_now

先ほど書いたアクションを任意の場所で呼んであげます。

この場合send_emailはあくまでメール本体を返してくれるだけなので、deliver_nowメソッドを呼ぶことでメールを送信しています。

無事メールが届きました

すると無事メールが届きました 🎉