Edited at

RailsのActionMailerでGmailを使ったらNet::SMTPAuthenticationErrorが出た

More than 3 years have passed since last update.


概要

Railsからメールを送信する機能を作る必要があったので

ActionMailerでGmailを使ってメールを送ろうとしてみました。

そしたらUserNameもPasswordも合ってるのにNet::SMTPAuthenticationErrorが出たので

対策を残しておきます。


2段階認証でアプリ パスワードを発行

以下のリンクから2段階認証を有効後、アプリパスワードを発行します

https://myaccount.google.com/security#signin

スクリーンショット 2016-09-26 22.26.27.png

適当に生成したら、そのパスワード(16文字)をコピーして環境変数に入れました。


~/.zshrc

export MAIL_ADDRESS='メールアドレス'

export MAIL_PASSWORD='さっきコピーしたアプリパスワード'


環境変数を使って直接指定したらダメ!

最初は以下のように書いていました。


config/environments/development.rb

config.action_mailer.smtp_settings = {

enable_starttls_auto: true,
address: 'smtp.gmail.com',
port: '587',
domain: 'gmail.com',
authentication: 'plain',
user_name: ENV['MAIL_ADDRESS'],
password: ENV['MAIL_PASSWORD']
}

そこで以下のように変更。。。


config/environments/development.rb

# 一旦変数に入れておく

mail = ENV['MAIL_ADDRESS']
pass = ENV['MAIL_PASSWORD']

config.action_mailer.smtp_settings = {
enable_starttls_auto: true,
address: 'smtp.gmail.com',
port: '587',
domain: 'gmail.com',
authentication: 'plain',
user_name: mail,
password: pass
}


なんで直接指定したら動かないんだろう。。。

何かわかることがありましたら教えてください。

(もしかしたら僕だけに発生した問題かもしれないけど)