Ruby on Rails5 にて ActionMailer 機能を使用してユーザ登録のメール送信の実装をしました。送信元は Gmail から送ったり、レンタルサーバのロリポップからも送ったりしました。
以下のエラーでちょっとはまったのですが、それも記載しておきますので誰かの参考になれば何よりです。
はまったエラー(詳細は記事にて)
- 555 5.5.2 Syntax error.
- Uncaught exception: 534-5.7.14
見出し
初期生成 rails generate
1 |
$ rails generate mailer HogeMailer send_when_signup |
rails generate mailer までは 固定です。
HogeMailer は 任意メーラークラス名です。
send_when_signup は 任意メソッド名です。サインアップ時のメールだったのでこれにしました。
サーバ設定ファイル
開発用 config/environments/development.rb
本番用 config/environments/production.rb
Gmailから送信する場合
1 2 3 4 5 6 7 8 9 10 11 12 |
# 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/
1 2 3 4 5 6 7 8 9 10 11 |
# 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
1 2 3 4 5 6 7 8 9 10 11 |
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 |
ユーザ登録から送信する場合の例で一応コントローラーも記載しております。
ユーザ登録の実装はこっちのページにあります。
hoge_mailer.rb
1 2 3 4 5 |
def send_when_signup(user) @user = user mail to: @user.email, subject: 'ユーザー登録が完了しました' end |
コントローラーから呼ばれる箇所です。userが渡されてきます。userにはemailがある構造が前提です。
send_when_signup.text.rb
メールの内容なので任意ですが一例です。
1 2 3 |
<%= @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://auxin01.wordpress.com/2012/12/14/gmail_5-5-2-syntax-error/
http://terrazilog.quipu.jp/?eid=591548