Edited at

Railsでgmailでメールを送ろうとしたけどsmtp認証のエラーが出て詰まった時の解決方法

More than 1 year has passed since last update.

何回かActionMailerでユーザが登録してからメールが送られるようにしようとしました。いろいろ調べてなかなか解決できなかったけどやっとできたんで、自分がどんな風にgmailやRailsを設定して解決できたかを簡単に書いておきたいなと思いました。

ところで、herokuでデプロイしています。


解決方法


  1. config/environments/production.rbなどの設定

  2. gmailの二段階認証の設定

  3. その他のセキュリティの設定


config/environments/production.rbなどの設定


production.rb

config.action_mailer.perform_deliveries = true

config.action_mailer.raise_delivery_errors = true
host = 'website.com'
config.action_mailer.default_url_options = { host: host }
# development.rbだと、上の2行じゃなくて下の一行
# config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => ENV["EMAIL_HIDDEN"],
:password => ENV["PASSWORD_HIDDEN"],
:authentication => :plain,
:enable_starttls_auto => true
}

環境変数のENV["EMAIL_PASSWORD"]とかを設定するにはfigaroというgemを使います。gmailのアカウントの情報をここで設定します。

(figaroの使い方を省きます)

herokuを使っていたら、

$ heroku config:set EMAIL_HIDDEN=メール

という風に環境変数を設定してください。

自分のgmailとそのアカウントのパスワードを設定すると、自分にメールを送れるようになります。ただ、他人はブロックされますね。


gmailの二段階認証の設定

じゃあ、他人にメールを送るにはどうしたらいい?

今まで、gmailの二段階認証が有効にしていなかったら、有効にしてください。

gmailのnavbarの9つの銀色の四角のdropdownを押して、アカウントをクリックします。

「ログインとセキュリティ」の「Googleへのログイン」をクリックします。

「2段階認証プロセス」を押して、手続きに従います。

それができたら、「2段階認証プロセス」の下にある「アプリ パスワード」でパスワードを取得してください

このパスワードを環境変数として設定してください!!(空白なしで)

つまり、上にあったproduction.rbのENV["EMAIL_PASSWORD"]は取得したパスワードに変更しないとダメです。

これで、gmailの方では自分のサイトが使えるアプリケーションとして登録されて、メールのパスワードじゃなくてそのアプリケーションの独特のパスワードを経由してメールを送るようになります。


その他のセキュリティの設定

私が詰まったところは上の二段階認証の設定だったけど、次の設定も必要みたいです。

・正直はよく分からないけど、このリンクでGoogleへのアカウントを許可します。


次の2つは必要かどうかは分からないけど、特に1番目をやってみた方がいいと思います。


  1. これも正直は関係するかどうかは分からないけど、これもいじりました。gmailのアカウントの受信トレイの画面で歯車のボタンを押して「設定」を押します。「メール転送とPOP/IMAP」のタブを押して、IMAPを有効にしてください。imap.png


  2. 2段階認証が設定してあると使えないみたいだけど、これも関係するらしいです。安全性の低いアプリ:ここで、設定を「オン」にします。上の対応でメールが送られなかったら、一回二段階認証を外してからやってみてもいいのかもしれません。



まとめ

はっきりとこれだ!って言えなくてすみませんが、とにかく上の対応で解決できました。

簡単に言えば、

1. gmailの方で二段階認証で作成したパスワードを環境変数として設定すること

2. その他のgmailのセキュリティを変更すること