くるみ
- Railsでメールを送信する方法を探している
- 難しいことはいいからとりあえずメールを送れるようにしたい
という方に向けて「RailsのAction Mailerを使ってメールを送信する方法」をまとめました。
初学者の備忘録ゆえに至らない点もあると思いますが参考になれば幸いです⸝⸝- ̫ -⸝⸝
お品書き
そもそもAction Mailerって?
Action MailerとはRailsに標準で提供されているメール送信のためのモジュールです。
手軽かつ簡単にテキストメール、HTMLメールまた添付ファイル付きのメールを送ることができるものです。
メールを送信するまでの手順
ステップは大きく分けて6つ。
くるみ
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_deliveries | deliverメソッドでメールを送信するか |
show_previews | プレビュー機能を有効にするか |
sendmail_settings | :sendmailモードでの設定情報 |
file_settings | fileモードでの設定情報 |
オレンジのものが今回使用したものです。
その中で「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_version | MIMEの順番 |
メール本文のデザインをいじる
viewsフォルダの中に先ほど作ったメーラー名のフォルダがあると思うのでその中に以下のファイルを作ります
- (アクション名).text.erb
くるみ
<%=@user.name%>様
_________________________________
【管理人よりメッセージが届きました】
<%=@message%>
_________________________________
〇〇〇管理人 より
そこにメールの本文を書きます。ビューと同じ要領で大丈夫です。
メーラーのアクションを呼び出す
ChatMailer.send_mail(@user, @message).deliver_now
先ほど書いたアクションを任意の場所で呼んであげます。
この場合send_emailはあくまでメール本体を返してくれるだけなので、deliver_nowメソッドを呼ぶことでメールを送信しています。
いざ実行してみると…
無事メールが届きました。これで完成です⸝⸝- ̫ -⸝⸝
くるみ
まとめ
参考になれば幸いです!では⸝⸝- ̫ -⸝⸝
参考 Action Mailer の基礎Railsガイド