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?

Node.jsでメールアドレスのMXレコードを確認して、バウンス率を下げる

0
Posted at

はじめに

会員登録フォームでは、入力ミスや存在しないドメインのメールアドレスが一定数混ざります。確認メールがバウンスし、その割合が高くなると、メール送信サービス側でアカウントが審査・停止されることがあります。登録が一時的に急増したとき、小規模なアプリほど影響を受けやすくなります。

各社が公表している基準

  • Resend: バウンス率4%未満、スパム率0.08%未満を求めています。超えると一時的に送信が停止されることがあります。
  • Amazon SES: バウンス率5%または苦情率0.1%でアカウントが審査対象になり、バウンス10%または苦情0.5%で送信が停止される可能性があります。

数値は2026年10月時点で各社の公式ドキュメントに記載されていたものです。利用前に最新のページを確認してください。

小規模なアプリほど影響を受ける理由

割合は長期では公平ですが、短期では大きく振れます。1日に100通しか送らないアプリでは、存在しないアドレスが5件あるだけでバウンス率5%に見えます。アドレスの質が悪いわけではなく、希釈してくれる正常なメールが少ないだけです。

ドメインがメールを受信できるか確認する

メールサーバーのないドメインへの送信は必ずバウンスします。Node.jsでは次のように確認できます。

import { promises as dns } from "node:dns";

async function domainHasMailServer(email) {
  const domain = email.split("@")[1];
  try {
    const records = await dns.resolveMx(domain);
    return records.length > 0;
  } catch {
    return false; // MXレコードなし、またはドメインが存在しない(簡略化: 一時的なDNSエラーでもfalseになります)
  }
}

MXレコードがなくても受信できるドメインはあります。登録フォームでは、強制的に拒否するのではなく警告として扱うほうが親切です。

そのほかの対策

  1. アドレスの形式を簡単に確認する(@が1つ、前後に文字がある、空白なし)
  2. 使い捨てメールのドメインを、定期的に更新する一覧でブロックする
  3. 確認リンクをクリックするまで、確認メール以外は送らない
  4. ハードバウンスしたアドレスには二度と送らない
  5. 自分のバウンス率を毎日確認し、上限の半分程度でアラートを設定する

作ったサービス

上記をまとめて扱えるよう、SentriSendを作りました。送信前のアドレス検証(使い捨てドメインの判定、DNSとメールサーバーの確認)ができ、SentriSend経由で送信するとAPIキーごとにバウンスの増加を検知して警告・減速・停止します。受信箱への到達を保証するものではなく、新しいサービスでまだ導入事例もありません。無料プランは月100リクエスト、カード不要です。

詳しい解説(英語・日本語)はこちらです。
https://sentrisend.com/ja/resources/why-email-accounts-get-paused

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?