コンテンツへスキップ
Guide

メッセージを 1 つも送信せずに電子メール アドレスを検証する

| 7 min read

3 つの API 呼び出しで電子メールの構文、MX レコード、および使い捨てドメインをチェックします。 SMTP 接続、確認メール、バウンスのリスクはありません。 無料の電子メール検証 API。

Email inbox with verification badges
Photo by Stephen Phillips on Unsplash

サインアップ フォームは電子メール アドレスを収集します。 それを保存し、ウェルカム メッセージを送信し、電子メールを送信します。 跳ねる。 住所がタイプミスでした。 またはドメインが存在しません。 それとも使い捨てだったのか @mailinator.com 10分後には無効になるアドレス。 あなたは今ジャンクを持っています データベースの記録、送信者の評判の低下、二度と戻ってこないユーザー。

従来の解決策は、「アドレスを確認するにはこのリンクをクリックしてください」という確認メールを送信することです。 それは機能しますが、摩擦が増えます。 コンバージョンが低下します。 そして、その後になるまでタイプミスは見つかりません すでに間違ったアドレスにメッセージを送信しています。

何かを送信する前に電子メール アドレスを検証できます。 3 つの API 呼び出しチェック構文、MX レコードと使い捨てドメイン。 プロセス全体にかかる時間は 200 ミリ秒未満で、問題を検出します これが電子メール配信失敗の 90% の原因です。

3 層の電子メール検証

各層は、異なるクラスの不正な電子メール アドレスを検出します。 組み合わせて使用すると完全な完成度が得られます 電子メール検証パイプライン、または必要なものを選択します。

  • 構文の検証。 アドレスは有効な形式に従っていますか? ドメインは 既知のタイプミスがありますか? の /v1/email/validate エンドポイントは RFC 5322 準拠をチェックし、 役割ベースのアドレスを検出します (admin@support@)と提案します ドメインの一般的なスペルミスの修正 gmial.com または hotmal.com
  • MX レコードの検証。 ドメインは電子メールを受信できますか? の /v1/email-mx/verify エンドポイントは DNS に MX レコードをクエリし、A にフォールバックします。 記録。 ドメインにメール サーバーがない場合、アドレスは配信できません。 いくら再試行しても それを修正します。
  • 使い捨て電子メールの検出。 使い捨てサービスのアドレスですか? の /v1/disposable-email/check 700 を超える既知の使い捨てドメインに対するエンドポイント チェック パターンマッチのバリエーション。 また、ドメインが無料プロバイダー (Gmail、 Outlook) を使用して、個人アドレスと使い捨てアドレスを区別できるようにします。

電子メールの構文をチェックし、タイプミスを見つけます

/v1/email/validate エンドポイントは 1 回の呼び出しでほとんどの作業を実行します。 検証します フォーマット、MX レコードの検索、使い捨てドメインのチェック、一般的な形式のタイプミスの検出 プロバイダーのドメイン。

応答:

電子メール jamie@gmial.com 構文は有効ですが、ドメインがタイプミスです。 API 返品 is_valid: false MX レコードが存在しないため、 gmial.com、 そして修正されたアドレスを提案します jamie@gmail.com。 この提案を表示するには サインアップ フォームを作成すると、ユーザーを無効なアカウントから救い出すことができます。

MX レコードを検証して電子メールが本物かどうかを確認する

/v1/email-mx/verify エンドポイントは DNS に重点を置いています。 MX の完全なリストを返します。 優先順位と deliverable ドメインかどうかを示すフィールド メールを受信できます。

応答:

deliverable フィールドは、次の 3 つの値のいずれかを返します。 "likely" (MX 記録が見つかりました)、 "unknown" (MX はありませんが、A レコードは存在するため、ドメインは メールを受け入れる)、または "unlikely" (MX レコードや A レコードはありません)。 MX レコードにはこれを使用します 生の DNS データが必要な場合の検証。

使い捨てアドレスと使い捨てアドレスを検出

/v1/disposable-email/check エンドポイントは一時的な電子メール サービスを識別します。 これらのアドレスは数分または数時間動作し、その後メールの受信を停止します。

応答:

is_free フィールドは、使い捨てドメインと無料プロバイダーを区別します。 Gメール アドレスが返される is_free: true そして is_disposable: false。 郵便配達員 アドレスが返される is_disposable: true そして is_free: false。 これ 区別は重要です。 すべての無料プロバイダーをブロックすると、インターネットの大部分がロックアウトされてしまいます。

Node.js で検証パイプラインを構築する

3 つのチェックすべてを 1 つの関数に結合します。 このパイプラインは各チェックを順番に実行します 最初の故障ではショートします。

async function validateEmail(email) {
  const headers = { "Content-Type": "application/json" };
  const body = JSON.stringify({ email });

  // Step 1: Syntax validation + typo detection
  const syntaxRes = await fetch("https://api.botoi.com/v1/email/validate", {
    method: "POST", headers, body,
  });
  const syntax = await syntaxRes.json();

  if (!syntax.data.format_valid) {
    return { valid: false, reason: "Invalid email format" };
  }

  if (syntax.data.suggestion) {
    return {
      valid: false,
      reason: \`Did you mean \${syntax.data.suggestion}?\`,
    };
  }

  // Step 2: MX record verification
  const mxRes = await fetch("https://api.botoi.com/v1/email-mx/verify", {
    method: "POST", headers, body,
  });
  const mx = await mxRes.json();

  if (!mx.data.has_mx) {
    return { valid: false, reason: "Domain cannot receive email" };
  }

  // Step 3: Disposable email detection
  const dispRes = await fetch("https://api.botoi.com/v1/disposable-email/check", {
    method: "POST", headers, body,
  });
  const disp = await dispRes.json();

  if (disp.data.is_disposable) {
    return {
      valid: false,
      reason: \`Disposable email detected (\${disp.data.provider})\`,
    };
  }

  return { valid: true, reason: null };
}

// Usage
const result = await validateEmail("test@mailinator.com");
console.log(result);
// { valid: false, reason: "Disposable email detected (Mailinator)" }

シーケンシャルなアプローチは読みやすく、早期に終了します。 構文が失敗した場合は、ネットワークをスキップします MX と使い捨て小切手が必要です。 早期終了よりも速度を優先する場合は、すべてを実行してください。 3 つを並行して:

async function validateEmail(email) {
  const headers = { "Content-Type": "application/json" };
  const body = JSON.stringify({ email });

  // Run all three checks in parallel
  const [syntaxRes, mxRes, dispRes] = await Promise.all([
    fetch("https://api.botoi.com/v1/email/validate", {
      method: "POST", headers, body,
    }),
    fetch("https://api.botoi.com/v1/email-mx/verify", {
      method: "POST", headers, body,
    }),
    fetch("https://api.botoi.com/v1/disposable-email/check", {
      method: "POST", headers, body,
    }),
  ]);

  const [syntax, mx, disp] = await Promise.all([
    syntaxRes.json(), mxRes.json(), dispRes.json(),
  ]);

  const errors = [];

  if (!syntax.data.format_valid) errors.push("Invalid format");
  if (syntax.data.suggestion) errors.push(\`Typo: try \${syntax.data.suggestion}\`);
  if (!mx.data.has_mx) errors.push("No MX records");
  if (disp.data.is_disposable) errors.push("Disposable domain");

  return {
    valid: errors.length === 0,
    errors,
    details: { syntax: syntax.data, mx: mx.data, disposable: disp.data },
  };
}

並列バージョンでは、次を使用して 3 つのリクエストすべてを同時に起動します。 Promise.all。 合計レイテンシは、合計ではなく最も遅いリクエストと等しくなります。 ほとんどの場合、3 つすべてが 100ミリ秒以内に完了します。

Python 検証パイプライン

Python でも同じ 3 段階の検証を行います。 この例では、 requests 図書館 明確にするために。

import requests

API_BASE = "https://api.botoi.com/v1"

def validate_email(email: str) -> dict:
    headers = {"Content-Type": "application/json"}
    payload = {"email": email}

    # Step 1: Syntax + typo check
    syntax = requests.post(
        f"{API_BASE}/email/validate", json=payload, headers=headers
    ).json()

    if not syntax["data"]["format_valid"]:
        return {"valid": False, "reason": "Invalid email format"}

    suggestion = syntax["data"].get("suggestion")
    if suggestion:
        return {"valid": False, "reason": f"Did you mean {suggestion}?"}

    # Step 2: MX record check
    mx = requests.post(
        f"{API_BASE}/email-mx/verify", json=payload, headers=headers
    ).json()

    if not mx["data"]["has_mx"]:
        return {"valid": False, "reason": "Domain cannot receive email"}

    # Step 3: Disposable check
    disp = requests.post(
        f"{API_BASE}/disposable-email/check", json=payload, headers=headers
    ).json()

    if disp["data"]["is_disposable"]:
        provider = disp["data"]["provider"]
        return {"valid": False, "reason": f"Disposable email ({provider})"}

    return {"valid": True, "reason": None}

# Usage
result = validate_email("jamie@gmial.com")
print(result)
# {'valid': False, 'reason': 'Did you mean jamie@gmail.com?'}

電子メールアドレスを検証する場合

タッチポイントが異なれば、必要な検証の深さも異なります。 各チェックが当てはまる場所は次のとおりです。

タッチポイント 構文 MXチェック 使い捨て なぜ
登録フォーム はい はい はい レコードを作成する前にタイプミス、無効なドメイン、使い捨てアカウントを検出します
チェックアウト/支払い はい はい オプション 領収書には配達可能な住所が必要です。 使い捨て小切手は返金ポリシーによって異なります
お問い合わせフォーム はい オプション いいえ 基本的なフォーマットチェックにより、明らかなジャンクを防ぎます。 MX チェックはボーナスです
ニュースレターの購読 はい はい はい 送信者の評判を保護します。 直帰率が高いとESPから警告を受ける
リードインポート / CRM はい はい はい データがパイプラインに入る前にクリーニングすることで、下流コストを節約できます
内部ツール はい いいえ いいえ 構文チェックによりデータ入力エラーが検出されます。 内部ユーザーは信頼されています

重要なポイント

  • 保存する前に検証してください。 データベース内のすべての悪質な電子メールには、次のようなコストがかかります。 送信の失敗、バウンス処理、送信者の評判の低下。 問題をその時点で把握する エントリーの。
  • タイプミスの検出はユーザーを救います。/v1/email/validate エンドポイント 一般的なドメインのスペルミスを検出し、提案を返します。 浮上「つまりそういうことだったのか ジェイミー@gmail.com?」 ユーザーの紛失を防ぎます。
  • MX チェックは迅速かつ無料です。 DNS ルックアップはミリ秒以内に解決されます。 あるよ スキップする理由はありません。 MX レコードのないアドレスではメールが受信されません。
  • 使い捨て検出は試験の悪用を保護します。 無料トライアルを提供する場合、または フリーミアム プラン、使い捨てメール検出により、同一人物による無制限のメール作成が阻止されます 使い捨てアドレスを持つアカウント。
  • 開始するために API キーは必要ありません。 3 つのエンドポイントはすべて 5 で匿名で動作します 1 分あたりのリクエスト数。 サインアップせずにパイプライン全体をテストします。 を追加 Authorization: Bearer YOUR_KEY より高いスループットが必要な場合はヘッダーを使用します。
  • 速度を上げるためにチェックを並行して実行します。 3 つのエンドポイントは独立しています。 使用する Promise.all 合計レイテンシーを、最も遅い単一リクエストまで削減します。 3 つすべての合計。

3 つのエンドポイントすべてに関する完全なドキュメントは、 インタラクティブ API ドキュメント。 各エンドポイントは、次の JSON 本文を受け入れます。 email フィールドに入力し、結果を返します Cloudflareのエッジネットワークから100ミリ秒未満。

FAQ

電子メールを送信せずに電子メール アドレスを検証できますか?
はい。 何も送信せずに 3 つのことを確認できます。アドレスが有効な構文 (RFC 5322) に従っているかどうか、ドメインにメールを受信するように構成された MX レコードがあるかどうか、ドメインが既知の使い捨て電子メール プロバイダーに属しているかどうかです。 これら 3 つのチェックは、サインアップ時に不正なアドレスの大部分を検出します。
Botoi メール検証 API は無料ですか?
はい。 匿名アクセスは、IP ベースのレート制限により、1 分あたり 5 リクエストで利用できます。 API キー、サインアップ、クレジット カードは必要ありません。 スループットを高めるには、有料プランが月額 9 ドルから始まり、150 以上の API エンドポイントすべてへのアクセスが含まれます。
MX レコード検証と SMTP 検証の違いは何ですか?
MX レコードの検証では、ドメインに電子メールを受け入れるように構成されたメール サーバーがあるかどうかがチェックされます。 ドメインが一般的にメールを受信できることを確認します。 SMTP 検証はさらに、メール サーバーに接続し、特定のメールボックスが存在するかどうかを尋ねることによって行われます。 MX チェックは高速 (100 ミリ秒未満) で無料です。 SMTP チェックは時間がかかり、メール サーバーによってブロックされる可能性があり、レート制限やスパム フラグがトリガーされる可能性があります。
使い捨て電子メールの検出はどの程度正確ですか?
botoi の使い捨て電子メール エンドポイントは、700 以上の既知の使い捨てドメインをチェックし、パターン マッチングを使用してバリエーション (「temp」、「trash」、「throwaway」などを含むドメイン) を検出します。 また、使い捨てドメインと、Gmail や Outlook などの無料プロバイダーも区別されます。 100% 完全な検出リストはありませんが、広く使用されているすべての使い捨てサービスを検出します。
電子メールをクライアントまたはサーバーで検証する必要がありますか?
両方。 クライアントで基本的な形式チェックを実行して、即時のフィードバックを取得します。 データベースに書き込む前に、サーバー上で MX チェックと使い捨てチェックを実行します。 クライアント側の検証により、ユーザー エクスペリエンスが向上します。 サーバー側の検証によりデータが保護されます。 クライアント側のチェックはバイパスされる可能性があるため、決して信頼しないでください。

botoiで開発を始めよう

150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。