Help us understand the problem. What is going on with this article?

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

More than 3 years have 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のセキュリティを変更すること

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away