0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【本番環境】Render + Rails (Devise) + Brevo でパスワードリセットメールを送信できない

0
Last updated at Posted at 2026-02-13

Render環境下(本番環境)で、Rails(Devise)とBrevoを使用してメール送信機能を実装した際に発生したエラーと、その解決策のまとめです。
最終的なコードは、下部にまとめております。


環境

  • フレームワーク: Ruby on Rails 8(Devise導入済み←これによるエラーあり)
  • プラットフォーム: Render
  • メール配信サービス: Brevo

発生したエラーと対応

1. 接続タイムアウト

エラーログ:
Net::OpenTimeout (execution expired)

原因:
Render 等のクラウド環境では、スパム対策としてポート587の通信が制限される場合があるそうで、500エラーが出て全く肝心のメールが届くかまで辿り着かず…。

対応:
config/environments/production.rb の SMTP ポート設定を 587 から Brevo 推奨の代替ポート 2525 に変更する。

参考URL: Which SMTP port should I use? (Port 587, 465, or 2525)


2. SMTP認証エラー

1を修正すると、今度は認証エラーのログが出ました。

エラーログ:
Net::SMTPAuthenticationError (535 5.7.8 Authentication failed)

原因:
smtp_settingsuser_name に、Brevoに登録したメールアドレスを設定していたため。

対応:
Brevo 管理画面
SMTP & API → SMTP にある 「Login」 の値を設定する。
末尾が下記のようになっているはず。

******brevo.com

※登録したメールアドレスではないので注意!!


3. 送信元メールアドレス (Sender) の未認証

対応:

  1. アプリ専用のGmailアドレスを取得
  2. Brevo 管理画面
    Senders & IP → Senders で登録・認証
  3. mailers/application_mailer.rbdefault from を認証したメールアドレスに変更

4. Devise 設定の未反映

エラーログ:

Sender (From) please-change-me-at-config-initializers-devise@example.com is not valid

原因:
Devise の送信元設定は、ApplicationMailerより優先されるため、デフォルト値のまま送信されていた。

対応:
config/initializers/devise.rb

config.mailer_sender

を認証済みメールアドレス(送信元メールアドレス)へ変更する。


最終的なコード

1. config/environments/production.rb

SMTP 接続設定

# 作成したアプリのURLを入れるが、ドメイン(https://)は入れない。
config.action_mailer.default_url_options = { host: '******.onrender.com', protocol: 'https' }

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  # Brevo 管理画面の「Login」の値
  user_name: '******brevo.com',

  # SMTP Key(GitHub環境変数で設定した値(key))
  password: ENV['******'],

  # 作成したアプリのURL。ドメイン(https://)は入れない。
  domain: '******.onrender.com',
  address: 'smtp-relay.brevo.com',
  port: 2525,
  authentication: :plain, # authentication: メールサーバーで認証が必要な場合はここで認証の種類を指定
  enable_starttls_auto: true # enable_starttls_auto: SMTPサーバーでSTARTTLSが有効かどうかを検出して有効にする。デフォルトはtrue。
}

※STARTTLS: 暗号化されていない平文での通信を、SSL/TLSを利用した暗号化通信に切り替える仕組み


2. app/mailers/application_mailer.rb

通常のメーラー設定

class ApplicationMailer < ActionMailer::Base
  default from: "認証済みメールアドレス(送信元メールアドレス)を書く"
  layout "mailer"
end

3. config/initializers/devise.rb

Devise 専用の送信元設定

Devise.setup do |config|
  # ApplicationMailerより優先されるため必ず変更
  config.mailer_sender = '認証済みメールアドレス(送信元メールアドレス)を書く'
end

まとめ

Render + Brevo + Devise のメール送信トラブル

  1. タイムアウトエラー → 587ポート → 2525ポートを使用
  2. SMTP Login を正しく設定
  3. 認証済み Sender を使用
  4. Devise の mailer_sender を必ず変更

上記を修正し、ようやく本番環境でパスワードリセットメールを送ることができました!
タイムアウトエラー続いたところは、Renderのログからは詳細が読み取れないので、一番ダメージ受けました。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?