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?

【Rails × Sorcery × Resend】Railsのメール送信をSMTPからResendに移行する手順

0
Last updated at Posted at 2026-03-21

はじめに

Railsアプリでパスワードリセット機能を実装する際、これまではSMTPを利用してメール送信を行っていましたが、今回Resend APIを利用する構成に変更しました。
変更した過程を以下に分けまとめました。

  1. ムームードメインによる独自ドメイン取得
  2. Resendの登録、設定
  3. railsの設定

※ここでは取得した独自ドメインをexample.comとしています。

本記事はプログラミングスクールで学習中の初心者が書いた記事になります。間違いなどございましたらご連絡いただけると幸いです。

前提

rails 7.2
renderでデプロイ済み
sorceryによるパスワードリセット実装済み
ローカルではメール送信が成功している状態

これまでの構成(SMTP)

render無料プランのサーバではSMTPによるメール送信ができないため、有料プランでメール送信機能を実装していました。

構成としては、ActionMailerとSMTPでメール送信していました。

Resendとは

APIベースでメールを送信できるサービスです。

2026/03時点では、無料プランではドメイン一つまで登録、利用できます。
テスト用途ではResend提供ドメインも利用できますが、本番環境で外部にメール送信するには独自ドメインの認証が必要です。たとえば https://example.onrender.comのようなrenderのドメインではメール送信をすることができません。

手順

1. 独自ドメイン取得

今回、ムームードメインで独自ドメインを取得しました。

ドメイン取得後、renderを開きます。該当するサービスを選択後、
左のメニューからSettingsを開き、Custom Domainsの中のAdd Custom Domainを押し、先ほど取得した独自ドメインを入力しAdd Domainを押して登録します。
NOKilDJUoa19Qzh1774099969_1774100091.png
すると下の画像のようなDNS設定に必要な値が表示されます。この時点ではまだVerifyを押さないでください。
EhV6McZFks2Qnrr1774102356_1774102437.png
プロパイダー側(ムームードメイン)に戻り、左メニューのドメイン操作からムームーDNSを選択します。
lRajGyYf5nN0K8d1774101035_1774101108.png
下の方にある「設定2へ進む」ボタンをクリックします。
OfF6wjLyARSTn131774101732_1774101788.png
「設定を追加」ボタンをクリックし、サブドメイン(空欄)、種別(A)、内容(render IP)を入れて追加を押します(Aレコードを追加)。
render IPはrenderのDNS設定が記載された画像の下方に記載されているrenderのIPアドレスです。

ドメイン名をIPv4アドレスに紐付けるレコードをAレコードと呼びます。

ちなみにrenderの仕様により、www付きドメインでアクセスしても登録したドメインにリダイレクトしてくれるようです。
例)ドメイン example.com をAレコードで登録。
render側が www.example.com も自動的に追加
www.example.com でアクセスしたユーザーを example.com へリダイレクト

render戻り、Verifyをクリックして終了です。
最初はDNSに反映されるまで時間がかかります。私の場合は10分ほどで終わりましたが、最大で72時間かかる場合もあるそうです。

2. Resendの設定

ここではrailsからResendへメール送信の命令が受け取れるよう、ResendのAPIキーを取得します。
さらに取得した独自ドメインでメール送信できるよう、ResendのDNSレコードをプロパイダー側(ムームードメイン)に追加します。

Resend APIキー取得

まず最初にResendにて新規登録またはログインします。
こちらの記事に取得方法が詳しく載っていますのでこちらを参考にキーを取得してください。

取得しましたら、Renderの該当するサービスを選択し、左メニューのEnvironmentを開きます。Environment Variablesの中のEditボタンを押し、Addボタンの中のNew Variableを押して先ほど取得したAPIキーを登録します。
スクリーンショット 2026-03-22 0.40.08.png

Resend DNSレコード取得、プロパイダー側の設定

これも上記の記事を参考にDNSレコードを取得して下さい。
Resendでドメインを登録するとDNSレコードが表示されるので、それをプロパイダー側(ムームードメイン)に追加します。追加の仕方は上記のドメイン取得時と同じです。
mZIFDZTvlnovS0H1774108472_1774108597.png

TXTレコードとはDNSにテキスト情報を格納できるレコードであり、SPFやDKIM、DMARCなどのメール認証情報を保持するために使用されます。
MXレコードとはメールの配送先サーバーを指定します。

その後Resendの画面に戻って「Verify」を押すことでドメイン認証が完了します。(ここら辺はスクショを撮り忘れたのでうろ覚えです。)
これも反映されるまで時間がかかりますのでご了承ください。

3. railsの設定

gem resendインストール

gem "resend"

bundle installします。

独自ドメインをホワイトリストに追加、本番環境のメール配信方法を指定

config/environments/production.rb

  # ホストの設定
  config.action_mailer.default_url_options = Settings.default_url_options.to_h
  # メール配信方法の設定
  config.action_mailer.delivery_method = :resend
  # 独自ドメインを追加(※)
  config.hosts << "example.com"
  config.hosts << "www.example.com"  # wwwありの場合も記述

※ これはメール送信のためではなく、RailsのHost Authorization機能により
指定したドメイン以外からのHTTPアクセスを防ぐための設定です。
独自ドメインでアプリにアクセスする場合必要になります。

config/settings/production.yml

default_url_options:
  host: 'example.com'
  protocol: 'https'

hostには取得した独自ドメインを入力します。

initializerを作成

config/initializers/resend.rb

Resend.configure do |config|
  config.api_key = ENV["RESEND_API_KEY"]
end

config/initializers/resend.rbを作成し、APIキーを読み込ませる設定を書きます。

メイラーの設定

app/mailers/application_mailer.rb

class ApplicationMailer < ActionMailer::Base
  default from: "no-reply@example.com"
  layout "mailer"
end

defaultに取得したドメインを使った任意のメールアドレスを設定します。
fromに指定するメールアドレスは、Resendで認証済みのドメインと一致している必要があります。

railsで変更した点は以上になります。

最後に

resendに独自ドメイン取得せず設定しようとして沼にハマったり、config.action_mailer.delivery_method = :smtpを:resendに変更し忘れたせいでローカルでは送信できているのに本番環境では送信されない、またログではエラーがでていないという状況になったり、と想定よりも時間がかかってしまいましたが、なんとか移行することができました。誰かの参考になれば幸いです。

参考記事など

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?