何回かActionMailerでユーザが登録してからメールが送られるようにしようとしました。いろいろ調べてなかなか解決できなかったけどやっとできたんで、自分がどんな風にgmailやRailsを設定して解決できたかを簡単に書いておきたいなと思いました。
ところで、herokuでデプロイしています。
#解決方法
- config/environments/production.rbなどの設定
- gmailの二段階認証の設定
- その他のセキュリティの設定
##config/environments/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番目をやってみた方がいいと思います。
-
これも正直は関係するかどうかは分からないけど、これもいじりました。gmailのアカウントの受信トレイの画面で歯車のボタンを押して「設定」を押します。「メール転送とPOP/IMAP」のタブを押して、IMAPを有効にしてください。
-
2段階認証が設定してあると使えないみたいだけど、これも関係するらしいです。安全性の低いアプリ:ここで、設定を「オン」にします。上の対応でメールが送られなかったら、一回二段階認証を外してからやってみてもいいのかもしれません。
###まとめ
はっきりとこれだ!って言えなくてすみませんが、とにかく上の対応で解決できました。
簡単に言えば、
- gmailの方で二段階認証で作成したパスワードを環境変数として設定すること
- その他のgmailのセキュリティを変更すること