【Rails5】Railsアプリケーションからメールの送信を行う
この記事では、アプリケーションからgmailの送信を行えるよう設定します。
Contents
筆者の環境
OS :win10-pro x64
実行環境: 環境構築の記事の通り
Gメールのセキュリティ設定
まず、メール送信用のアカウントを作りましょう。
普段使ってるものは、セキュリティ面を考慮して、メール送信では使わないことをお勧めします。
作ったら、アカウント管理ページで二段階認証をONにします。
二段階認証ONにしたら、その下にあるアプリパスワードも設定します。
その他を選択し、アプリ名を適当に付けます。
この時発行される12文字のパスワードは後程使います。
development.rbの設定
development.rbのRails.application.configure内に下のコードをコピペします。
#<AppName>\config\environments\development.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
port: 587,
address: 'smtp.gmail.com',
domain: 'smtp.gmail.com',
user_name: 'gメールアカウント名@gmail.com',
password: 'さっきの12文字のアプリパスワード',
authentication: 'login',
enable_starttls_auto: true
}
user_nameとpasswordは、自分に合った内容に書き換えてください。
メーラーの設定
メーラーの生成
ディレクトリをアプリケーションに移し、メーラー生成します。
ディレクトリ移動
cd c:\data\<AppName>
メーラー生成
rails g mailer NoticeMailer send_mail
コマンドを実行したら、
\app\mailers\send_mail.rbと
\app\views\send_mailが生成されていたら正常です。
メーラーの編集
\app\mailers\send_mail.rbを編集
#\app\mailers\send_mail.rb
class NoticeMailer < ApplicationMailer
default from: '送信元@gmail.com'
def send_mail(user_mail)
@mail = user_mail
mail(
to: @mail,
subject: 'メール題名'
)
end
end
最低限の機能で動かします。
メールテキストの編集
\app\views\notice_mailerにsend_mail.html.erbとsend_mail.text.erbがあります。
この二つはメールのテンプレートで、erb形式なので<%%>などでプログラムを埋め込むこともできます。
send_mail.html.erb:HTMLメール用テンプレート
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<style>
p.content{
color:red;
}
</style>
</head>
<body>
<%= @mail %>さんへ
<hr>
<p class="content">こんにちは。</p>
</body>
</html>
send_mail.text.erb:テキストメール用テンプレート
<%= @mail %>さんへ
------------------------
こんにちは。
メーラーの呼び出し
まずは、Railsコンソールから呼び出して、実際にメールを送信してみましょう。
Railsコンソール起動
rails c
メーラー起動
NoticeMailer.send_mail("送りたい先のメールアドレス").deliver_now
#<Mail::Message:********…のようなログが帰ってきたら、送信成功です。
標準ではHTMLメールが送信されます。HTMLメールが送信できなかった場合に、テキストメールのテンプレートが使用されます。
アクションで使う場合は、こんな感じでいいと思います。
NoticeMailer.send_mail(params[:mail]).deliver_now
参考書籍
こちらにはもっと詳しく書かれています。持っていて損はない一冊かなと思います。