【Ruby on Rails】メール送信の実装手順(ActionMailer)とはまったエラーなど

【Ruby on Rails】メール送信の実装手順(ActionMailer)とはまったエラーなど

Ruby on Rails5 にて ActionMailer 機能を使用してユーザ登録のメール送信の実装をしました。送信元は Gmail から送ったり、レンタルサーバのロリポップからも送ったりしました。

以下のエラーでちょっとはまったのですが、それも記載しておきますので誰かの参考になれば何よりです。

はまったエラー(詳細は記事にて)

  • 555 5.5.2 Syntax error.
  • Uncaught exception: 534-5.7.14

初期生成 rails generate

$ rails generate mailer HogeMailer send_when_signup

rails generate mailer までは 固定です。

HogeMailer は 任意メーラークラス名です。

send_when_signup は 任意メソッド名です。サインアップ時のメールだったのでこれにしました。

サーバ設定ファイル

開発用 config/environments/development.rb

本番用 config/environments/production.rb

Gmailから送信する場合

  # Gmail送信設定
  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:               'gmail.com',
    user_name:            'hoge@gmail.com', # Gmailメールアドレス
    password:             'hogepassword', # Gmailメールアドレスのパスワード
    authentication:       'login',
    enable_starttls_auto: true
  }

ロリポップから送信する場合

レンタルサーバで借りているので設定してみました。

ロリポップで設置したドメインのメールアドレスを作成してある必要があります。メールアドレス作成は以下の公式マニュアルでご確認ください。(管理画面から簡単に出来ます)

https://lolipop.jp/manual/user/doku-mailsett/

  # lolipop
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    port:                 587,
    address:              'smtp.lolipop.jp',
    user_name:            'info@hoge.com', # lolipopのメールアドレス
    password:             'hogepassword', # lolipopのメールアドレスのパスワード
    authentication:       'login',
    enable_starttls_auto: true
  }

メール共通設定

application_mailer.rb

class ApplicationMailer < ActionMailer::Base
default from: ‘管理人 <info@hoge.com>’,
bcc: ‘info-bcc@hoge.com’,
reply_to: ‘info-replyto@hoge.com’
layout ‘mailer’
end

fromのところがこういう風にかっこをつけて「from: ‘管理人 <info@hoge.com>’,」と書かないとエラー「555 5.5.2 Syntax error.」になっちゃいました。

参考サイト様で同じ現象を見つけてこれを対応しました。

メール個別設定

users_controller.rb

  def create
    @user = User.new(user_params)
    if @user.save
      session[:user_id] = @user.id
      flash[:notice] = "ユーザー登録が完了しました"
      HogeMailer.send_when_signup(@user).deliver
      redirect_to("/users/#{@user.id}")
    else
      render("users/new")
    end
  end

ユーザ登録から送信する場合の例で一応コントローラーも記載しております。

ユーザ登録の実装はこっちのページにあります。

https://normalblog.net/system/rails-signup/

hoge_mailer.rb

  def send_when_signup(user)
    @user = user
    mail to: @user.email,
         subject: 'ユーザー登録が完了しました'
  end

コントローラーから呼ばれる箇所です。userが渡されてきます。userにはemailがある構造が前提です。

send_when_signup.text.rb

メールの内容なので任意ですが一例です。

<%= @user.name %> さん
登録完了です。
ユーザ名 <%= @user.name %>

.text.rb でなく .html.rb にするだけでHTMLメールが出来ちゃいました。

テストしてみる

ユーザ登録時の処理なのでユーザ登録してみます。

Gmailの場合、上記の認証ログインだと以下のエラーになりました。

Uncaught exception: 534-5.7.14

解消方法は、Gmailのセキュリティレベルを低くする事でこのエラーが出なくなります。

レベルを変更するには、以下の「安全性の低いアプリの許可」をする必要があります。以下URLから変更可能です。

https://www.google.com/settings/security/lesssecureapps

違う認証を使用すればセキュリティを低くする必要はないと思うのですが、Gmailはテストで使用しただけだったので、特に調べてません。すみません。。

 

という感じでエラーが無ければ簡単に出来ます。また何かあれば追記します。

参考サイト様

上記内容で解決しない場合、自分も参考にさせていただいたサイト様に情報があるかもしれません。

https://railsguides.jp/action_mailer_basics.html

https://stackoverflow.com/questions/4321346/555-5-5-2-syntax-error-gmails-smtp

https://stackoverflow.com/questions/27586940/ruby-gmail-uncaught-exception-534-5-7-14-https-accounts-google-com-continue

https://auxin01.wordpress.com/2012/12/14/gmail_5-5-2-syntax-error/

http://terrazilog.quipu.jp/?eid=591548

https://qiita.com/hirotakasasaki/items/ec2ca5c611ed69b5e85e

https://qiita.com/Yama-to/items/823baf26bba3193712ea

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です