Heroku でホストされているサイトから確認メールを送信するために ActionMailer を使用しています。smtp_settings でユーザー名とパスワードを文字列として入力したときは問題なく動作していましたが、Github で公開されているため、明らかにセキュリティ上の欠陥です。そこで今日、Gmail のパスワードを変更し、Heroku の設定を使用してユーザー名とパスワードを保存しました。私のsmtp設定は次のようになります。
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings ={
address: "smtp.gmail.com",
port: 587,
domain: "gmail.com",
user_name: "#{ENV['EMAIL_USER']}",
password: "#{ENV['EMAIL_PASS']}",
authentication: "plain",
enable_starttls_auto: true
}
メールを送信しようとするたびに、「Net::SMTPAuthenticationError (535-5.7.8 ユーザー名とパスワードが受け入れられませんでした」というエラーが表示されます。コンソールに構成設定の値を表示するために puts を追加しました。
puts "USERNAME : #{ENV['EMAIL_USER']}"
puts "PASSWORD : #{ENV['EMAIL_PASS']}"
Heroku のログでは、完全に問題なく出力されました。不審なアクティビティが原因で Gmail がログインをブロックしているという別の投稿を読みましたが、そのような警告はありませんでした。構成変数を使用すると機能しません-文字列に戻すと、ローカル開発環境で機能するようになりました。私はここで少し途方に暮れています。何か案は?