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

RailsでAction Mailを使ってメールを送信する方法

くるみ

Railsでメールを送る方法を教えてよ
ということで今回は

  • Railsでメールを送信する方法を探している
  • 難しいことはいいからとりあえずメールを送れるようにしたい

という方に向けて「RailsのAction Mailerを使ってメールを送信する方法」をまとめました。

初学者の備忘録ゆえに至らない点もあると思いますが参考になれば幸いです⸝⸝- ̫ -⸝⸝

そもそもAction Mailerって?

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

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

メールを送信するまでの手順

ステップは大きく分けて6つ。

手順
step1
gmailのパスワードを取得
step2
Action Mailerの設定
step3
メーラーを生成する
step4
メーラーを編集する
step5
メール本文のデザインをいじる
step6
メーラーのアクションを呼び出す
本題に入るよ!

くるみ

RailsでActionMailerを使ってメールを送信する方法

gmailのパスワードを取得

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

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

ブログ主

ます送信元にしたいアカウントにログインしてね

googleにログインし「セキュリティ」を選択

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

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

ここで電話番号やコードを入力したりして2段階認証を行います。

「アプリパスワードを選択」

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

パスワードを生成

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

するとパスワードが生成されるのでそれをコピーすればOK。

そのパスワードはすぐに使うよ

くるみ

Action Mailerの設定

今回は開発環境で実現したいのでconfig/environments/development.rbに以下のように記述します。

#メールの設定
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
}

これでGmailでメールを送信する準備が整いました。

上で指定しているパラメータについては以下にまとめました。

パラメータまとめ

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

 

オレンジのものが今回使用したものです。

その中で「delivery_method」に指定する値が複数ありややこしいので、そちらも以下にまとめました。

delivery_methodに設定できる値

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

メーラーを生成する

$ rails g mailer 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。

次はそのメーラーを編集していきます。

メーラーを編集する

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_priority
(x_msmail_priority)
メールの重要性
content_typeコンテンツタイプ(text/plain的な)
charset文字コード
parts_order複数形式の順番
mime_versionMIMEの順番

メール本文のデザインをいじる

viewsフォルダの中に先ほど作ったメーラー名のフォルダがあると思うのでその中に以下のファイルを作ります

  • (アクション名).text.erb
これがメール本文のデザインになるわけだね

くるみ

<%=@user.name%>様

_________________________________
【管理人よりメッセージが届きました】

<%=@message%>

_________________________________

〇〇〇管理人 より

そこにメールの本文を書きます。ビューと同じ要領で大丈夫です。

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

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

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

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

 

いざ実行してみると…

無事メールが届きました。これで完成です⸝⸝- ̫ -⸝⸝

お疲れ様!

くるみ

まとめ

Action Mailer便利すぎてもうなんというか…草。

参考になれば幸いです!では⸝⸝- ̫ -⸝⸝

参考 Action Mailer の基礎Railsガイド

コメントを残す