...

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

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

どうもおはようポテト(@ohayoupoteto22)です。

Railsでメールを送る方法を教えてよ

ということで今回は

Railsでメールを送信する方法を探している

難しいことはいいからとりあえずメールを送れるようにしたい

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

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

ブログ主

早速いってみよう!

 

そもそもAction Mailerって?

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

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

 

手順

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

手順

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

ソロモン

 

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ガイド

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA