3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Resend + deviseで本番環境でパスワードリセットメールを送る

3
Posted at

はじめに

webアプリケーションを作っている際に、本番環境でパスワードリセットメールを送信しようとするとタイムアウトが起きてしまう事態が発生しました。
調査したところ、ホスティング環境ではSMTP接続が制限されている場合があるため、SMTPではなく メール送信API を利用する方法に切り替えることにしました。
その際に、Resendという外部APIを使ったところ問題なくメール送信ができるようになったので、その方法をご共有いたします。

ResendのAPIキー取得

Resendはメール送信をAPI経由で簡単に行うことができるメール配信サービスです。

まずはこちらのWebサイトにアクセスいただき、アカウントを作成します。
ログイン成功後に、左側のサイドバーからAPI Keysを選択します。

遷移後のページでCreate API keyボタンを押します。

スクリーンショット 2026-03-15 14.59.56.png

設定を進めると、APIキーが表示されるとのでそちらを控えておきましょう。

APIキーは生成時のみ表示されます。
セキュリティの関係上、後から確認できないため必ず控えておきましょう。

ドメイン認証

メールを送信するためにドメイン認証が必要になります。

左側のサイドバーからDomainsを選択します。

アプリのドメインをAdd domainボタンを押して追加しましょう。

スクリーンショット 2026-03-15 15.22.29.png

Recordsタブから、ドメイン認証に必要な値を確認することができます。これらをドメイン側に設定する必要があります。

名称未設定のデザイン.png

これらの値をドメイン側に(お名前.com)などのDNSレコードに追加しておきます。
これは 送信ドメイン認証(SPF / DKIM) のための設定で、
メールのなりすましを防ぎ、正しい送信元からのメールであることを証明するための設定です。

Contentの値を 入れましょう.png

ResendのDomainsページで認証を開始し、以下のようになれば成功です。

スクリーンショット 2026-03-15 15.41.26.png

アプリ側の設定

まずはresendをインストールします。

gem "resend"
bundle install

環境変数の設定をします。

# config/initializers/resend.rb
Resend.api_key = ENV["RESEND_API_KEY"]

Deviseのメール送信処理を記述します。

# app/mailers/devise_mailer.rb
class DeviseMailer < Devise::Mailer
  def reset_password_instructions(record, token, opts = {})
    reset_url = edit_user_password_url(reset_password_token: token)

    Resend::Emails.send({
      from: "送信元メールアドレス",
      to: record.email,
      subject: "パスワードリセット",
      html: "<p>こちらからパスワードをリセットしてください</p>
             <a href='#{reset_url}'>パスワードをリセット</a>"
    })
  end
end

作ったカスタムのメイラーを指定します。

# config/initializers/devise.rb
config.mailer = "DeviseMailer"

まとめ

今回は、Resendを利用してDeviseのパスワードリセットメールをAPI経由で送信する方法を紹介しました。

実装の流れは以下の通りです。

  1. ResendでAPIキーを取得

  2. ドメイン認証(DNS設定)を行う

  3. gem resend をインストール

  4. DeviseのMailerをカスタマイズ

  5. Resend APIを利用してメール送信

SMTPが利用できない環境でも、APIを利用することで安定してメール送信を行うことができました。

同様の問題に直面した方の参考になれば幸いです。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?