> Rails5開発 >

【Rails5】Railsアプリケーションからメールの送信を行う

Rails5開発

この記事では、アプリケーションからgmailの送信を行えるよう設定します。

筆者の環境

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

参考書籍

こちらにはもっと詳しく書かれています。持っていて損はない一冊かなと思います。

Ruby on Rails 5アプリケーションプログラミング
山田 祥寛
技術評論社
販売価格 ¥3,888(2018年6月30日時点)