結論
Railsのバージョンを7.0.2.4以降にすれば解決します。
Rails 7.0.2.4未満に存在するバグだそうです。
本家のリポジトリに同じようなissueが立っていました。
https://github.com/rails/rails/issues/44161
詳細
環境
- ruby 3.1.2
- rails 7.0.2.3
やりたかったこと
Ruby on Railsチュートリアルに従ってwebアプリを作ってherokuにデプロイし、本番環境からMailgunを使ってアカウント有効化用のメールを送りたかった。
やったこと
-
rails generate mailer UserMailer account_activation
で、アカウント有効化メールを送るメソッドを持つMailerを作った -
ApplicationMailer
のdefault from
を適切なメールアドレスに書き換えた -
app/views/user_mailer/account_activation.html.erb
を編集してメールの文面を作った - アカウントが作られた時にメールが配信されるよう
UserMailer.account_activation(@user).deliver_now
を適切な場所に追加した - configファイルに以下のような設定を記述した
- herokuにデプロイ、MailGunの設定をした
config/encironments/production.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
host = '<Herokuサブドメイン名>.herokuapp.com'
ActionMailer::Base.smtp_settings = {
:port => ENV['MAILGUN_SMTP_PORT'],
:address => ENV['MAILGUN_SMTP_SERVER'],
:user_name => ENV['MAILGUN_SMTP_LOGIN'],
:password => ENV['MAILGUN_SMTP_PASSWORD'],
:domain => host,
:authentication => :plain,
}
期待した挙動
アカウントを作るとメールが配信される。
実際の挙動
メールは配信されない。
Herokuのログを見ると Completed 500 Internal Server Error
と書かれている。
補足
どうやらconfigファイルの
ActionMailer::Base.smtp_settings = {
の部分が悪さをしているらしく、
config.action_mailer.smtp_settings = {
と書き換えれば期待通りの動きをしてくれます。