登録時に使い捨てメールアドレスをブロックする方法
登録フォームで一時的なメールアドレスを見つける3つの方法を、静的なブロックリストからAPIまでコード付きで紹介。本物のユーザーをブロックしてしまう間違いも。
使い捨てメールとは何か
使い捨て(一時)アドレスは、登録なしで受信箱を発行するサービスのもので、多くは数分から数時間しか使えません。Mailinator、Guerrilla Mail、10 Minute Mail、そして無数のあまり知られていないドメインがこの仕組みです。メルマガを避けたい人には便利ですが、大量にアカウントを作る人にとっても同じくらい便利です。
よく混同される近いカテゴリーが3つあり、扱いを変える必要があります。
- プライバシーリレー:「Appleでサインイン」の
privaterelay.appleid.com、DuckDuckGoのduck.com、Firefox Relay などは、本物で長く使われる受信箱に転送します。ブロックするとプライバシーを重視する顧客を傷つけます。せいぜい小さなリスクシグナルとして扱いましょう。 - 無料メールサービス:Gmail、Outlook.com、Yahooなどは使い捨てではありません。悪用のパターンが異なり、1つの受信箱のエイリアスです。Gmailエイリアスのガイドで扱っています。
- そもそもメールを受信できないドメイン:
gmial.comのようなタイプミスや架空のドメインです。そこではアカウントを確認できないので、これも検出する価値があります。
方法1:コード内の静的なブロックリスト
GitHubでは何万件もの使い捨てドメインを収録したオープンソースのリストが管理されています。最も簡単なのは、それをセットに読み込んで登録時にドメインを確認することです。
# Python DISPOSABLE = set(open("disposable_domains.txt").read().split()) def is_disposable(email: str) -> bool: domain = email.rsplit("@", 1)[-1].strip().lower().rstrip(".") parts = domain.split(".") # サブドメインも対象:mail.tempdomain.com -> tempdomain.com return any(".".join(parts[i:]) in DISPOSABLE for i in range(len(parts) - 1))
費用はかからず、遅延も増えません。欠点は次のとおりです。
- 古くなる。新しい使い捨てドメインは絶えず現れ、多くのサービスはブロックリストを避けるためにわざとドメインを入れ替えます。半年前にコピーしたリストには最新のものがなく、それこそが悪用者の使うものです。
- リストごとに食い違う。リストによって収録ドメインが違い、誤りを含むものもあります。複数を統合すれば網羅性は上がりますが、保守の手間も増えます。
- 更新ジョブが必要で、変更のたびにデプロイ(または再読み込み)が要ります。
方法2:メールサーバー(MX)を確認する
ドメインのMXレコードをDNSで引けば、メールを受信できるかが分かります。どのリストにも載っていないタイプミスや架空のドメインを検出できます。
# Python、dnspythonを使用 import dns.resolver def can_receive_mail(domain: str) -> bool: try: return len(dns.resolver.resolve(domain, "MX", lifetime=2)) > 0 except dns.resolver.NXDOMAIN: return False except Exception: return True # DNSの不調はユーザーのせいではない:通す
結果はドメインごとにキャッシュし、タイムアウトは短くし、自分のDNSリゾルバの一時的な不調を理由に登録を拒否しないでください。なお、MXチェックでは使い捨てサービスは検出できません。メールを問題なく受信するのが彼らの仕事だからです。
方法3:両方をこなし、自動で最新に保つAPI
APIを使えば、リストの保守とMX照会をコードの外に出せます。Attrelixは複数の公開リストを統合して毎日更新し、各ドメインが最初に確認された日を記録し、メールサーバーを確認し、同じ呼び出しでGmailエイリアスを正規化します。さらにネットワークとデバイスもスコアリングするので、メールの判定だけでなく登録ごとに1つの判定が得られます。ドメイン検索は使い捨てメールチェッカーで無料で試せます。
curl https://attrelix.com/v1/check \ -H "Authorization: Bearer $ATTRELIX_SECRET" \ -H "Content-Type: application/json" \ -d '{"email":"someone@mailinator.com","ip":"203.0.113.9"}'
レスポンスには email.disposable、email.relay、email.mx と正規化済みアドレスが、全体の判定と理由とともに含まれます。
本物のユーザーをブロックしてしまう間違い
- リレーをブロックする。AppleのプライベートリレーはAppleでサインインする多くのiPhoneユーザーが使っています。ブロックすれば彼らをブロックすることになります。
- DNSエラーでブロックする。タイムアウトはドメインが偽物である証拠になりません。
- 範囲が広すぎるリスト。コミュニティのリストには、正当な小規模プロバイダーや企業ドメインが含まれていることがあります。顧客から苦情が来たら、議論せずにそのドメインを許可しましょう。
- 出口のないエラーメッセージ。「無効なメールアドレス」は、本物のアドレスを入力した人を混乱させます。一時的な受信箱は受け付けていないことを伝え、別のアドレスを求めましょう。
使い捨てチェックでは捕まえられないもの
使い捨てドメインをブロックしても悪用のコストは少し上がるだけで、悪用者はGmailに移ります。そこから先、悪用は1つの受信箱や1台のデバイスの背後にある多数のアカウントとして現れます。ここで複数アカウントの検出の出番です。
まとめ
- 使い捨てドメイン、プライバシーリレー、無料メールサービス、受信できないドメインを区別します。
- 静的リストは手始めには良いものの古くなります。更新するかAPIを使いましょう。
- 受信できないドメインにはMXチェックを使い、DNSの不調時は通します。
- 悪用者はGmailエイリアスに移ると想定し、アドレスを正規化します。