「登録完了メールが届かない」という問い合わせは、
アプリのバグではなく 送信ドメイン認証の未設定が原因のことがほとんどです。
なぜ届かないのか
受信側は「このメールは本当にそのドメインから送られたか」を検証します。
検証できないメールは、迷惑メール扱いか、そもそも受け取り拒否されます。
実際に返ってくるエラーはこういう形です。
550 5.7.26 Your email has been blocked because the sender is
unauthenticated. ... SPF [example.jp] = did not pass, DKIM = did not pass
SPF も DKIM も設定されていない、と明示されています。
SPF — 「どのサーバーから送るか」の宣言
DNS の TXT レコードで、送信を許可するサーバーを宣言します。
種別: TXT 名前: @(ドメイン自体)
値: v=spf1 include:_spf.google.com ~all
include:… 利用しているメールサービスの指定(各社が公開しています)~all… それ以外は「疑わしい」扱い(-allにすると完全拒否)
SPFレコードは1ドメインに1つだけです。複数書くと全体が無効になります。
複数のサービスを使う場合は、1行に include: を並べます。
v=spf1 include:_spf.google.com include:sendgrid.net ~all
DKIM — 「改ざんされていない」の署名
送信側が秘密鍵で署名し、受信側が DNS 上の公開鍵で検証します。
鍵はメールサービス側の管理画面で生成し、出てきた値を DNS に登録します。
種別: TXT 名前: <セレクタ>._domainkey
値: v=DKIM1; k=rsa; p=MIIBIjANBg...(長い公開鍵)
登録後、サービス側で「認証を開始」する操作が別途必要なことが多いです。
DNS に置いただけでは署名が始まらないので、ここを見落としがちです。
DMARC — 検証に失敗したときの扱いを指示
種別: TXT 名前: _dmarc
値: v=DMARC1; p=none; rua=mailto:postmaster@example.jp
最初は必ず p=none(何もしないが報告は受ける)から始めます。
いきなり p=reject にすると、設定漏れがあった瞬間に正規のメールまで消えます。
レポートを見て問題が無いことを確認してから、quarantine → reject と段階的に上げます。
設定できているかの確認
dig +short TXT example.jp | grep spf
dig +short TXT selector._domainkey.example.jp
dig +short TXT _dmarc.example.jp
実際に送って確認する場合、Gmail なら受信メールの
「メッセージのソースを表示」で次を見ます。
spf=pass (google.com: domain of ... designates ...)
dkim=pass header.i=@example.jp
dmarc=pass
3つとも pass になっていれば完了です。
その他の落とし穴
- DNS の反映待ち … 数分〜数時間かかる。すぐに諦めない
- 差出人アドレスの不一致 … 認証したドメイン以外を From にすると、書き換えられるか弾かれる
- 共有IPの評判 … 安価な送信サービスは、他利用者の影響を受けることがある
まとめ
| レコード | 役割 | 最初の設定 |
|---|---|---|
| SPF | 送信元サーバーの宣言 | v=spf1 include:... ~all |
| DKIM | 署名による改ざん検知 | サービス側で鍵生成 → DNS 登録 → 有効化 |
| DMARC | 失敗時の扱いの指示 | p=none から始める |
この3つを入れるだけで、到達率は劇的に変わります。
サービス公開前に必ず設定しておくべき項目です。