1
0

More than 1 year has passed since last update.

Rails7のActionMailerでメールを送ろうとすると`500 Internal Server Error`が出る

Posted at

結論

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を使ってアカウント有効化用のメールを送りたかった。

やったこと

  1. rails generate mailer UserMailer account_activationで、アカウント有効化メールを送るメソッドを持つMailerを作った
  2. ApplicationMailerdefault fromを適切なメールアドレスに書き換えた
  3. app/views/user_mailer/account_activation.html.erbを編集してメールの文面を作った
  4. アカウントが作られた時にメールが配信されるよう UserMailer.account_activation(@user).deliver_nowを適切な場所に追加した
  5. configファイルに以下のような設定を記述した
  6. 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 = {
と書き換えれば期待通りの動きをしてくれます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0