ブログに戻る
エンジニアリング

使い捨てメールデータセットの構築方法

Josselin Liebe
Josselin Liebe

偽アカウントをブロックする際、最初のステップは通常同じです:メールを検証することです。しかし使い捨てメールを検出するには、まずどのドメインが使い捨てなのかを知る必要があります。GitHubの公開リストは明らかなケースはカバーしていますが、ほとんど更新されません。毎週新しいサービスが新鮮なドメインで登場し、レーダーをすり抜けています。

私たちはWebAPIで独自のデータセットを構築することにしました。その方法を紹介します。

偽アカウントが実際のビジネス問題である理由

偽アカウントは単なる技術的な問題ではありません。ビジネスに直接的なコストをもたらします。

  • CRMノイズ : 使い捨てメールで作成されたすべての偽アカウントが営業パイプラインに入ります。営業チームは存在しないリードの確認に時間を浪費し(Hubspot、Salesforceなど)、コンバージョン指標が歪み、CRMのシグナル対ノイズ比が低下します。月間数千件のサインアップがあるSaaSでは、数十時間の無駄を意味する可能性があります。

  • 無料トライアルとリソースの悪用 : 使い捨てメールにより、一人のユーザーがアカウントをループ作成して無料トライアルを無期限に悪用したり、無料クレジットを積み重ねたり、クォータを回避したりできます。私たちのようなAPI製品では、これはコンバージョンのないリソース消費です。

  • 汚染された製品指標 : 偽アカウントはサインアップ数を人工的に膨らませ、アクティベーション(例:MixpanelやMetabaseのダッシュボード)、リテンション、コンバージョン率を歪めます。ゴーストアカウントでいっぱいのコホートでは、信頼性の高い製品判断を下すことができません。

  • 評判と配信可能性のリスク : 使い捨てアドレスにオンボーディングメールを送ることは、虚空に送ることと同じです。バウンスが積み重なり、配信可能性が低下し、メールプロバイダーとの送信ドメイン評判がダメージを受けます。

問題:動きの速いプロバイダー

一時的なメールサービスはすべて同じ方法で動作するわけではありません。ドロップダウンメニューに固定ドメインリストを表示するものもあります。毎回の訪問でドメインをローテーションしながらランダムなアドレスを生成するものもあります。JavaScriptで動的にドメインを挿入し、生のHTMLには見えないものもあります。

信頼性の高いデータセットを構築するには、これらの各動作に適応する必要があります。

ステップ1:マルチストラテジー収集

私たちは20以上の使い捨てメールプロバイダーを対象としています。それぞれに対して、その動作方法に最も適した抽出戦略を展開します。

標準HTTPリクエスト : HTMLでドメインを直接公開しているサイト(ドロップダウンメニュー、リスト、事前入力された入力フィールド)の場合、シンプルなHTTP呼び出しで十分です。DOMを解析してドメインを抽出します。

ヘッドレスブラウザ : 多くの現代的なプロバイダーはJavaScriptを通じてコンテンツを読み込みます。静的HTMLには役立つものがありません。JSを実行し、完全なレンダリングを待ってから最終DOMにアクセスするヘッドレスブラウザを使用します。

スクリーンショット + OCR : サービスによってはさらに進んで、ドメインがDOMのどこにも存在せず、キャンバスや画像内にのみレンダリングされます。このような場合、スクリーンショットを撮りOCRでテキストを抽出します。

直接API呼び出し : サービスがアドレスを生成するAPI(公開または半公開)を公開している場合、直接使用します。

ステップ2:スマートドメイン抽出

HTMLやスクリーンショットを取得するだけでは不十分です。まだ確実にドメインを抽出する必要があります。複数の抽出レイヤーを順番に適用します:

  1. 入力フィールド : 事前入力されたメールアドレスがある <input> 要素をスキャンし、ドメインを抽出します
  2. ドロップダウンメニュー : <select> 要素には利用可能なドメインの完全なリストが含まれていることが多い
  3. リンクと生テキスト : 最後の手段として、すべての表示テキストで @domain.tld パターンを検索します

ステップ3:誤検知フィルタリング

これが最も重要なステップです。積極的な抽出はノイズを生成します:実際には使い捨てではないドメイン。フィルタリングなしでは、合法的なユーザーをブロックするリスクがあり、それは許容できません。

パイプラインにはいくつかのフィルターが適用されます:

  • 除外リスト : 主要な合法的ドメイン(gmail.com、outlook.comなど)とインフラドメイン(googleapis.com、cloudflare.comなど)は系統的に除外されます
  • 構造的バリデーション : ドメインが有効な形式、認識されたTLDを持ち、静的アセット(.js、.css、.png)のように見えないことを確認します
  • DNS検証 : ドメインが実際にメールを受信できることを確認するためにMXレコードの存在を検証します
  • 信頼度スコアリング : 各ドメインはそれを報告したすべてのソースでタグ付けされます。複数の独立したプロバイダーで見られたドメインはほぼ確実に使い捨てです

この多層フィルタリングにより、積極的な抽出でも非常に低い誤検知率を維持できます。

ステップ4:重複排除とインデクシング

同じドメインが複数のプロバイダーに頻繁に現れます。データベースを充実させる前に結果をマージします:各ドメインは正規化され、重複排除され、ソースの完全なリストを保持します。

結果はリアルタイムクエリに最適化された検索エンジンにインデックスされます。APIが検証リクエストを受信すると、このデータセットに対するルックアップは1ミリ秒未満で完了します。

ステップ5:モニタリングと継続的な更新

使い捨てメールの状況は常に変化しています。ドメインが消え、新しいものが現れます。これらの変化を捉えるために、パイプラインを自動的に定期的に実行しています。

各実行はレポートを生成します:処理されたプロバイダー数、発見されたドメイン、エラーなど。プロバイダーがインターフェースを変更したり、リクエストをブロックしたりすると、即座に通知を受け取り、戦略を適応させます。

数字

現在、私たちのデータセットには20以上の異なるプロバイダーから38万以上の検証済み使い捨てドメインが含まれています。これはメール検証APIの disposable フィールドを直接駆動します。

これがあなたにとって意味すること

アドレスで GET /v1/intelligence/email を呼び出すと、disposable フィールドがこのデータセットとリアルタイムで照合されます。6ヶ月前にダウンロードされた静的リストではなく:自動化されたパイプラインによって毎日更新される生きたデータセットです。

import requests

response = requests.get(
    "https://api.veille.io/v1/intelligence/email",
    params={"query": "user@guerrillamail.com"},
    headers={"x-api-key": "YOUR_API_KEY"},
)
data = response.json()

if data["disposable"]:
    print(f"Disposable email detected (risk: {data['risk_score']})")

使い捨てメールをブロックすることで、攻撃者が大規模に偽アカウントを作成するために使用する最初の手段を断つことができます。そしてそれは確固たるデータセットから始まります。

関連記事