はじめに
個人開発しているiOSアプリ(Next.js + Supabase + Capacitor)をApp Storeに出したところ、審査で次の理由で却下されました。
we did not receive any confirmation email after attempted to register by an email.
自分で何度試してもメール認証は通るのに、審査担当にだけ確認メールが届きませんでした。
調べた結果、原因はDNSに DMARCレコードがなかったこと でした。
Resendでドメイン認証まで済ませていても起きるので、同じ構成の人向けにまとめます。
構成
- 認証
- Supabase Auth(メール+パスワード、Apple、Google)
- メール送信
- SupabaseのカスタムSMTPにResendを設定(送信元
noreply@xxx.app)
- SupabaseのカスタムSMTPにResendを設定(送信元
- DNS
- Vercel DNS
症状
- 自分のGmailには確認メールが届く。何度テストしても問題なし
- App Storeの審査担当(iCloudのアドレス)には届かない
調べたこと
1. Supabase側で送信に失敗していないか
SupabaseのAuthログを見ると、審査担当の /signup は status: 200 で、user_confirmation_requested が記録されていました。SMTP送信でエラーになっていればここで失敗が返ります。Supabaseからメールを出すところまでは成功していました。
2. SMTPは本当に設定されているか
最初にAIで調査したところ「SMTP未設定でSupabase標準のメール送信がチーム外に届かない」と報告されました。
しかし実際にダッシュボードの Authentication > Emails > SMTP Settings を開くと、カスタムSMTPはオンでResendが設定済みでした。
3. ドメインの認証レコードを確認
DNSを引いて、メール認証に関わるレコードを確認しました。
| レコード | 状態 |
|---|---|
SPF(send.rootlink.app のTXT) |
あり |
DKIM(resend._domainkey.rootlink.app) |
あり |
DMARC(_dmarc.rootlink.app) |
なし |
【原因】iCloudはDMARCを必須にしているので弾かれていた
AppleのiCloudメール向け送信者ガイドラインには、次のように書かれています。
The sending domain must publish their Domain-based Message Authentication, Reporting, and Conformance (DMARC) policy.
Gmailは送信量が少なければDMARCなしでも受け取ります。自分のGmailに届いていたのはそのためで、iCloud宛てだけが届いていませんでした。
なぜResendを設定済みでも起きていたのか?
Resendのドメイン認証で求められるのはSPFとDKIM(と送信結果を受け取るためのMX)だけです。
DMARCは「追加推奨」の扱いなので、入れなくてもResend上は認証完了になり、普通に送信できます。Gmailにも届くのでiCloud宛てに送るまで気づけません。
SPF・DKIM・DMARCを手紙にたとえると
このあたりの関係性があんまり解釈できないのでイラストとかで噛み砕いてみました。
-
SPF
- この配達業者(Resend)は、このドメインの手紙を運んでよいという登録
-
DKIM
- 手紙に押された、本物であることを示す印鑑
-
DMARC
- 印鑑が合わない手紙が届いたらどう扱うか、ドメインから受け取る側へのお願い
対処
Vercelのドメイン設定でDNSレコードを1件追加しました。
| Name | Type | Value |
|---|---|---|
_dmarc |
TXT | v=DMARC1; p=none; |
p=none は「ルールは持っているが、今は様子を見る」という設定です。Resendのドキュメントでも、最初はこの緩い設定から始めることが勧められています。
追加後、Google Public DNS(https://dns.google/resolve?name=_dmarc.rootlink.app&type=TXT)で値が返ることを確認しました。
まとめ
- Resendでドメイン認証が完了していてもDMARCは自動では入らない
- iCloudはDMARCを必須にしているのでDMARCがないとiCloud宛てに届かない
-
Gmailでしかテストしていないと気づけない。
- App Storeの審査担当はiCloudのアドレスを使う - メールを出すアプリは、リリース前にSPF・DKIM・DMARCの3つがそろっているか確認する
参考
- Postmaster information for iCloud Mail - Apple Support
- DMARC - Resend Docs
