+ 作るログイン
図を読み込んでいます…
1 / 14
メールのしくみ ― DNS から SPF・DKIM・DMARC、Resend の運用まで / 全11章

メールのしくみ 10:Resend の DNS 設定

発行
アニメモ公式
版
第1版
改訂
コマ
全14

Resend にドメインを登録し、DNS に4行を書くまでを1行ずつ説明します。サブドメインを使う理由、地域の選び方、管理画面での名前の書き方と二重になる落とし穴、DKIM・MX・SPF・DMARC それぞれの行の意味、Cloudflare での注意、確認済みになるまでの待ち方、dig での確かめ方、最後のテスト送信まで。

この作品でやること:DNS に4行を書く

9本目で、Resend に任せられないことの1つ目が「DNS の設定」だと説明しました。自分のドメインの掲示板に書けるのは、持ち主だけだからです。

この作品では、その設定を1行ずつ見ていきます。書くのは、図の4行です。

行何のためか理由を説明した作品
DKIM の公開鍵署名を確かめてもらうため6本目
send.mail の MX戻ってきたメールを Resend が受け取るため3本目
send.mail の SPF封筒のドメインの送信元一覧5本目
_dmarcFrom と揃っているか、不合格ならどうするか7本目

上の3行は、Resend が「この値を入れてください」と表で示してくれます。最後の DMARC は、自分で足します。

これまでの作品を読んでいれば、どの行も「なぜ要るのか」が分かるはずです。この作品では、実際に入れるときの手順と、よくある落とし穴を中心に見ていきます。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 1 / 14
  • この作品でやること:DNS に4行を書く
  • 種類
  • 名前
  • 値
  • TXT
  • resend._domainkey.mail
  • p=MIGfMA0GCSq…
  • → DKIM の公開鍵(6本目)
  • MX
  • send.mail (優先度 10)
  • feedback-smtp.ap-northeast-1.amazonses.com
  • → 戻ってきたメールの受け口(3本目)
  • TXT
  • send.mail
  • v=spf1 include:amazonses.com ~all
  • → SPF(5本目)
  • TXT
  • _dmarc
  • v=DMARC1; p=none; rua=mailto:…
  • → DMARC(7本目)。自分で足す
  • 3行は Resend が示す。DMARC の1行は自分で足す。どれも理由は見てきた。

送信には、サブドメインを使う

Resend にドメインを登録するとき、animemo.app そのものではなく、mail.animemo.app のようなサブドメインを使うのがおすすめです。Resend 自身もそう勧めています。理由は2つあります。

① 評判を分ける

8本目で見たとおり、評判はドメインごとにも付きます。将来お知らせメールを送り始めて、それが嫌われて点数が下がったとします。登録確認メールも同じドメインから送っていたら、ログインに必要なメールまで届かなくなります。用途ごとにサブドメインを分けておけば、評判の巻き添えを防げます。

② 普段のメールの設定とぶつからない

animemo.app あてのメールを Google Workspace などで受け取っているなら、animemo.app の掲示板には既にその MX や SPF の行があります。そこに Resend の行を混ぜると、5本目で見た「SPF は1行だけ」「10回まで」の問題が起きやすくなりますし、書き換えを間違えて普段のメールが止まる事故も起きえます。サブドメインなら、別の名前の欄に書くので干渉しません。

1本目で見たとおり、サブドメインは持ち主が自由に、無料で作れます。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 2 / 14
  • 送信には、サブドメインを使う
  • animemo.app
  • animemo.app
  • mail.animemo.app
  • 普段の受信(例: Google Workspace)
  • Resend で送る専用
  • ① 評判を分ける(8本目) ② 既存の MX・SPF とぶつからない(5本目)
  • 評判を分けるため。そして普段のメールの設定とぶつけないため。

Resend の管理画面でドメインを追加する

Resend にログインし、Domains → Add Domain を開きます。入れるのは2つです。

欄入れる値
Namemail.animemo.app
RegionTokyo(ap-northeast-1)

Region(地域) は、実際にメールを送る送信網がどこにあるかを選ぶ欄です。受け取る人に近い地域から送るほうが、わずかですが速く届きます。Animemo の利用者は主に日本にいるので、東京を選びます。Supabase も東京で作っているので、揃えておくと考えることが減ります。

地域はドメインごとの設定で、後から変えるにはドメインを登録し直すことになります。最初に決めておきましょう。

追加すると、次のページの「DNS に入れる3行」の表が表示されます。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 3 / 14
  • Resend の管理画面でドメインを追加する
  • Domains → Add Domain
  • 地域 = 実際に送る 送信網の場所。 受け取る人に近いほうが 速い。後から変えるには 登録し直しになる。
  • Name: mail.animemo.app
  • Region: Tokyo(ap-northeast-1)
  • 追加すると、DNS に入れる3行の表が表示される
  • Domains → Add Domain。名前は mail.animemo.app、地域は東京を選ぶ。

Resend が示す3行

Resend の画面に出る表は、おおよそ次の形です(値は例です。必ず自分の画面に出たものを使ってください)。

種類名前値
TXTresend._domainkey.mailp=MIGfMA0GCSq…
MXsend.mail(優先度 10)feedback-smtp.ap-northeast-1.amazonses.com
TXTsend.mailv=spf1 include:amazonses.com ~all

これを、ドメインの DNS を管理している画面(2本目で見た NS の向き先。Cloudflare や、ドメインを買った販売店)に1行ずつ追加します。

値は、必ず画面からコピーして貼り付けます。とくに1行目の公開鍵は長く、手で写すと必ず間違えます。1文字でも違えば DKIM は合格しません。

次のページから、この表の「名前」の書き方と、各行の意味を順に見ます。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 4 / 14
  • Resend が示す3行
  • 種類
  • 名前
  • 値
  • TXT
  • resend._domainkey.mail
  • p=MIGfMA0GCSq…
  • → DKIM の公開鍵(6本目)
  • MX
  • send.mail (優先度 10)
  • feedback-smtp.ap-northeast-1.amazonses.com
  • → 戻ってきたメールの受け口(3本目)
  • TXT
  • send.mail
  • v=spf1 include:amazonses.com ~all
  • → SPF(5本目)
  • DKIM の公開鍵・戻りメールの受け口・SPF。値は画面に出たものをそのまま写す。

「名前」の欄は、管理画面の流儀で書く

DNS の設定でいちばん多い間違いが、名前が二重になることです。

多くの DNS の管理画面では、animemo.app の設定画面で名前の欄に resend._domainkey.mail と入れると、後ろに .animemo.app を自動で補って resend._domainkey.mail.animemo.app として保存します。Resend の表が resend._domainkey.mail のように途中までしか書いていないのは、このためです。

ここで親切心から resend._domainkey.mail.animemo.app と全部入れると、管理画面がさらに .animemo.app を足して、resend._domainkey.mail.animemo.app.animemo.app という存在しない名前になってしまいます。受け取る側は正しい名前で探すので、いつまでも見つかりません。

管理画面によっては、全部書く流儀のものもあります。入れた後に保存された名前の表示を見て、最後が .animemo.app 1回だけになっているかを確かめてください。後のページの dig で確かめるのも確実です。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 5 / 14
  • 「名前」の欄は、管理画面の流儀で書く
  • 入力: resend._domainkey.mail
  • resend._domainkey.mail.animemo.app
  • 入力: 最後まで全部書く
  • …mail.animemo.app.animemo.app
  • 保存後の表示で、最後が「.animemo.app」1回だけになっているかを確かめる
  • 多くの管理画面はドメイン名を自動で補う。全部書くと二重になる。

1行目:DKIM の公開鍵

1行目は、6本目で見た DKIM の公開鍵です。

resend._domainkey.mail.animemo.app  TXT  "p=MIGfMA0GCSq…"

名前の組み立ては、6本目で見たとおり セレクタ._domainkey.署名するドメイン です。Resend のセレクタは resend、署名するドメインは mail.animemo.app です。

値の p= の後ろが公開鍵です。対になる秘密鍵は Resend の中に保管されていて、こちらが見ることはありません。Resend は送るたびにこの秘密鍵で署名し、受け取る側はこの行の公開鍵で署名を確かめます。

この行があることで、DKIM の署名が d=mail.animemo.app で合格するようになります。そして From: も mail.animemo.app なので、7本目の DMARC の「揃っている」も DKIM 側で満たせます。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 6 / 14
  • 1行目:DKIM の公開鍵
  • 種類
  • 名前
  • 値
  • TXT
  • resend._domainkey.mail
  • p=MIGfMA0GCSq…
  • → DKIM の公開鍵(6本目)
  • MX
  • send.mail (優先度 10)
  • feedback-smtp.ap-northeast-1.amazonses.com
  • → 戻ってきたメールの受け口(3本目)
  • TXT
  • send.mail
  • v=spf1 include:amazonses.com ~all
  • → SPF(5本目)
  • Resend が作った鍵の、公開する側。長いので必ずコピーして貼る。

2行目:send.mail の MX は、戻ってきたメールの受け口

2行目の MX には、「メールを受け取るわけではないのに、なぜ MX?」と引っかかる人が多いです。

答えは3本目の封筒の差出人にあります。Resend は、封筒の差出人を …@send.mail.animemo.app にしてメールを送ります。宛先が存在しないなどでメールが届かなかったとき、相手のサーバーは「届きませんでした」という知らせ(バウンス)を、その封筒の差出人に送り返します。

送り返すとき、相手のサーバーは send.mail.animemo.app の MX を引きます。そこが Amazon SES の受け口を指していれば、知らせは Resend に届き、「この宛先は存在しない」と記録されます。8本目で見た「存在しない宛先に送り続けて評判を落とす」を防ぐための、大事な道です。

MX が無いと、戻りメールは行き場を失い、Resend はバウンスに気づけません。

優先度の数字(10)は、2本目で見たとおり、複数の受け口があるときの順番です。ここでは1つだけなので、画面の値をそのまま入れれば構いません。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 7 / 14
  • 2行目:send.mail の MX は、戻ってきたメールの受け口
  • 種類
  • 名前
  • 値
  • TXT
  • resend._domainkey.mail
  • p=MIGfMA0GCSq…
  • → DKIM の公開鍵(6本目)
  • MX
  • send.mail (優先度 10)
  • feedback-smtp.ap-northeast-1.amazonses.com
  • → 戻ってきたメールの受け口(3本目)
  • TXT
  • send.mail
  • v=spf1 include:amazonses.com ~all
  • → SPF(5本目)
  • 届きませんでした
  • Resend
  • send.mail.animemo.app の MX
  • Gmail
  • 届かなかった知らせは封筒の差出人へ戻る。その住所を Resend に向ける。

3行目:send.mail の SPF

3行目は、5本目で見た SPF です。

send.mail.animemo.app  TXT  "v=spf1 include:amazonses.com ~all"

「Amazon SES の送信サーバーから来たメールは正規」という宣言です。~all は、それ以外から来たら「たぶん偽物」という意味でした。

この行が mail.animemo.app ではなく send.mail.animemo.app に置かれるのは、5本目の最後で見たとおり、SPF は封筒の差出人のドメインで読まれるからです。2行目の MX と同じ名前なのも、同じ「封筒の差出人」のための設定だからです。

SPF 側で From: と揃うかは、7本目で見た「ゆるい一致」で判定されます。send.mail.animemo.app と mail.animemo.app は、どちらも親が animemo.app なので揃っています。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 8 / 14
  • 3行目:send.mail の SPF
  • 種類
  • 名前
  • 値
  • TXT
  • resend._domainkey.mail
  • p=MIGfMA0GCSq…
  • → DKIM の公開鍵(6本目)
  • MX
  • send.mail (優先度 10)
  • feedback-smtp.ap-northeast-1.amazonses.com
  • → 戻ってきたメールの受け口(3本目)
  • TXT
  • send.mail
  • v=spf1 include:amazonses.com ~all
  • → SPF(5本目)
  • 封筒の差出人が send.mail.animemo.app だから、SPF もそこに置く。

4行目:DMARC は自分で足す。p=none から

Resend が示す3行には、DMARC が入っていません。Resend 自体は DMARC を必須にしていないからです。それでも、8本目で見た Gmail と Yahoo の条件を考えると、自分で1行足しておくべきです。

名前: _dmarc(animemo.app の掲示板に)
種類: TXT
値:   v=DMARC1; p=none; rua=mailto:[email protected]

7本目で見たとおり、DMARC の宣言は親のドメイン animemo.app に置けば、mail.animemo.app などのサブドメインにも効きます。

p=none から始めて、rua= に届く集計レポートを見ながら、段階的に quarantine、reject へ進めます。いきなり reject にしない理由も7本目で見ました。rua= には、自分が受け取れるアドレスを書きます。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 9 / 14
  • 4行目:DMARC は自分で足す。p=none から
  • 種類
  • 名前
  • 値
  • TXT
  • resend._domainkey.mail
  • p=MIGfMA0GCSq…
  • → DKIM の公開鍵(6本目)
  • MX
  • send.mail (優先度 10)
  • feedback-smtp.ap-northeast-1.amazonses.com
  • → 戻ってきたメールの受け口(3本目)
  • TXT
  • send.mail
  • v=spf1 include:amazonses.com ~all
  • → SPF(5本目)
  • TXT
  • _dmarc
  • v=DMARC1; p=none; rua=mailto:…
  • → DMARC(7本目)。自分で足す
  • animemo.app の掲示板に _dmarc という名前で。サブドメインにも効く。

Cloudflare に入れるときの注意

DNS を Cloudflare で管理している場合の注意点です(Animemo は配信に Cloudflare を使っています)。

オレンジの雲(プロキシ)は関係ありません。 Cloudflare の DNS 画面には、行ごとにオレンジの雲のマーク(Cloudflare を経由させるかどうか)がありますが、これは A や CNAME の行だけのものです。TXT や MX には、そもそもこの設定がありません。

値の引用符は、画面の案内に従います。 TXT の値を " で囲むかどうかは、管理画面によって扱いが違います。Cloudflare のように自動で整えてくれる画面もあります。

TTL は Auto のままで構いません。

同じ名前に古い行が残っていないか確かめます。 以前に別のサービスを試したことがあると、send.mail や animemo.app に古い SPF の行が残っていることがあります。5本目で見たとおり、SPF の行が2つあると permerror になり、両方無効になります。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 10 / 14
  • Cloudflare に入れるときの注意
  • TXT・MX にはプロキシの設定欄が無い(出ていたら A・CNAME を触っている)
  • 値の前後の " は、管理画面の案内どおりに(自動で付く画面もある)
  • TTL は Auto のままでよい
  • 同じ名前に、古い SPF の行が残っていないか確かめる(2行は permerror)
  • TXT と MX は、オレンジの雲(プロキシ)とは関係ない。古い SPF の行の残りに注意。

入れたら、Verified になるまで待つ

DNS に行を入れたら、Resend の画面で確認のボタンを押します。Resend が DNS を読みに行き、すべての行が見つかると Verified(確認済み) になります。ここまで来れば、そのドメインから送れます。

すぐに Verified にならなくても、慌てないでください。2本目で見た写し(キャッシュ)と TTL のせいで、新しい行が世界中から見えるようになるまで、数分から数時間かかることがあります。何度も書き直すと、かえって状況が分かりにくくなります。

何時間たっても変わらないときは、次を疑います。

疑うこと確かめ方
名前が二重になっている保存された名前の表示・次のページの dig
値のコピー漏れ・余分な空白画面の値と見比べる
書いた場所が本物の掲示板ではないdig NS animemo.app で NS の向き先を見る(2本目)
  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 11 / 14
  • 入れたら、Verified になるまで待つ
  • Pending(確認中)
  • Verified(確認済み)
  • DNS の写し(TTL)が入れ替わるのを待つ
  • 何時間たっても変わらないなら、名前の打ち間違いと NS の向き先を疑う
  • 2本目の「写し」が入れ替わる時間。数分〜数時間かかることがある。

自分の手で、世界から見えている値を読む

2本目で見た dig で、入れた行が世界から見えているかを確かめます。

$ dig +short TXT resend._domainkey.mail.animemo.app
"p=MIGfMA0GCSqGSIb3DQEB…"

$ dig +short MX send.mail.animemo.app
10 feedback-smtp.ap-northeast-1.amazonses.com.

$ dig +short TXT send.mail.animemo.app
"v=spf1 include:amazonses.com ~all"

$ dig +short TXT _dmarc.animemo.app
"v=DMARC1; p=none; rua=mailto:[email protected]"

何も返ってこなければ、その名前の行はまだ見えていません(あるいは名前が違います)。管理画面の表示と、ここで見える答えが食い違っていたら、信じるべきは dig のほうです。受け取る側が見るのも、この答えだからです。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 12 / 14
  • 自分の手で、世界から見えている値を読む
  • $ dig +short TXT resend._domainkey.mail.animemo.app
  • "p=MIGfMA0GCSqGSIb3DQEB…"
  • $ dig +short MX send.mail.animemo.app
  • 10 feedback-smtp.ap-northeast-1.amazonses.com.
  • $ dig +short TXT send.mail.animemo.app
  • "v=spf1 include:amazonses.com ~all"
  • 管理画面を眺めるより、dig の答えのほうが確実。

最後に、自分の Gmail へ送って判定結果を読む

Verified になったら、実際にメールを送って確かめます。宛先は、自分が持っている実在の Gmail アドレスにします(でたらめなアドレスに送らない理由は11本目で見ます)。

受け取ったら、Gmail でそのメールを開き、右上のメニューから「メッセージのソースを表示」を選びます。SPF・DKIM・DMARC の結果がまとめて表示されます。

表示意味
SPF: PASS(send.mail.animemo.app)3行目の SPF が効いている
DKIM: PASS(mail.animemo.app)1行目の公開鍵が効いている
DMARC: PASS4行目の DMARC と、From との一致が効いている

3つとも PASS なら、設定は完成です。どれかが FAIL なら、11本目の最後で見る表を手がかりに、その行の設定を見直します。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 13 / 14
  • 最後に、自分の Gmail へ送って判定結果を読む
  • Gmail → メニュー → メッセージのソースを表示
  • SPF: PASS(send.mail.animemo.app)
  • DKIM: PASS(mail.animemo.app)
  • DMARC: PASS
  • テストの宛先は自分の実在するアドレスか、[email protected](11本目)
  • メッセージのソースを表示で、SPF・DKIM・DMARC の3つが PASS なら完成。

まとめ:Resend の DNS 設定

この作品で書いた4行を、もう一度並べます。

行何のためか
resend._domainkey.mail TXTDKIM の公開鍵。署名を確かめてもらう(6本目)
send.mail MX戻ってきたメールを Resend が受け取る(3本目)
send.mail TXT封筒のドメインの SPF(5本目)
_dmarc TXTFrom との一致と、不合格時のお願い(7本目)。自分で足す

手順としては、サブドメインで登録し、地域は東京を選び、名前の二重に気をつけて入れ、Verified を待ち、dig で確かめ、最後に Gmail で3つの PASS を見る、という流れです。

これで「借りられないもの」の1つ目は終わりです。次の作品では、2つ目の運用、つまり送り始めてから評判と利用者を守るためにやることを見ていきます。

  • メールのしくみ 10 / 11 ― Resend の DNS 設定
  • 14 / 14
  • まとめ:Resend の DNS 設定
  • 種類
  • 名前
  • 値
  • TXT
  • resend._domainkey.mail
  • p=MIGfMA0GCSq…
  • → DKIM の公開鍵(6本目)
  • MX
  • send.mail (優先度 10)
  • feedback-smtp.ap-northeast-1.amazonses.com
  • → 戻ってきたメールの受け口(3本目)
  • TXT
  • send.mail
  • v=spf1 include:amazonses.com ~all
  • → SPF(5本目)
  • TXT
  • _dmarc
  • v=DMARC1; p=none; rua=mailto:…
  • → DMARC(7本目)。自分で足す
  • 次の作品では、送り始めてから気をつけること(運用)を見る。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]