Torna al blog
Engineering

Come abbiamo costruito un dataset di email usa e getta

Josselin Liebe
Josselin Liebe

Quando si tratta di bloccare account falsi, il primo passo è quasi sempre lo stesso: verificare l'email. Ma per individuare un'email usa e getta, è prima necessario sapere quali domini sono usa e getta. Le liste pubbliche su GitHub coprono i casi ovvi, ma sono raramente aggiornate. Ogni settimana compaiono nuovi servizi con domini freschi che sfuggono al radar.

Abbiamo deciso di costruire il nostro dataset su WebAPI. Ecco come.

Perché gli account falsi sono un problema reale per le aziende

Gli account falsi non sono solo un problema tecnico. Hanno un costo diretto sul business.

  • Rumore nel CRM : ogni account falso creato con un'email usa e getta finisce nella pipeline di vendita. I team di vendita sprecano tempo a qualificare lead inesistenti (Hubspot, Salesforce, ecc.), le metriche di conversione vengono distorte e il rapporto segnale/rumore nel CRM peggiora. Per un SaaS con migliaia di registrazioni al mese, questo può significare decine di ore sprecate.

  • Abuso di prove gratuite e risorse : le email usa e getta permettono a un singolo utente di creare account in loop per abusare indefinitamente delle prove gratuite, accumulare crediti gratuiti o aggirare le quote. Per un prodotto API come il nostro, si tratta di consumo di risorse senza alcuna conversione.

  • Metriche di prodotto inquinate : gli account falsi gonfiano artificialmente i numeri di registrazione e distorcono l'attivazione (ad esempio un dashboard Mixpanel o Metabase), la retention e i tassi di conversione. Non è possibile prendere decisioni di prodotto affidabili con coorti pieni di account fantasma.

  • Rischi per la reputazione e la deliverability : inviare email di onboarding a indirizzi usa e getta significa inviare nel vuoto. I bounce si accumulano, la deliverability cala e la reputazione del dominio mittente subisce un colpo presso i provider email.

Il problema: provider che si muovono velocemente

I servizi di email temporanea non funzionano tutti allo stesso modo. Alcuni espongono un elenco fisso di domini in un menu a tendina. Altri generano indirizzi casuali ad ogni visita, ruotando tra i domini. Alcuni iniettano i loro domini dinamicamente tramite JavaScript, invisibili nell'HTML grezzo.

Costruire un dataset affidabile significa adattarsi a ciascuno di questi comportamenti.

Fase 1: raccolta multi-strategia

Prendiamo di mira 20+ provider di email usa e getta. Per ciascuno, impieghiamo la strategia di estrazione più adatta al suo funzionamento.

Richieste HTTP standard : per i siti che espongono i loro domini direttamente nell'HTML (menu a tendina, liste, campi di input pre-compilati), una semplice chiamata HTTP è sufficiente. Analizziamo il DOM ed estraiamo i domini.

Browser headless : molti provider moderni caricano il loro contenuto tramite JavaScript. L'HTML statico non contiene nulla di utile. Utilizziamo browser headless che eseguono JS, attendono il rendering completo, quindi ci danno accesso al DOM finale.

Screenshot + OCR : alcuni servizi vanno oltre: il dominio non esiste da nessuna parte nel DOM ed è renderizzato solo all'interno di un canvas o un'immagine. In questi casi, scattiamo uno screenshot ed estraiamo il testo tramite OCR.

Chiamate API dirette : quando un servizio espone un'API (pubblica o semi-pubblica) per generare indirizzi, la utilizziamo direttamente.

Fase 2: estrazione intelligente dei domini

Ottenere l'HTML o lo screenshot non è sufficiente. Dobbiamo comunque estrarre i domini in modo affidabile. Applichiamo più livelli di estrazione in sequenza:

  1. Campi di input : analizziamo gli elementi <input> alla ricerca di indirizzi email pre-compilati ed estraiamo il dominio
  2. Menu a tendina : gli elementi <select> contengono spesso l'elenco completo dei domini disponibili
  3. Link e testo grezzo : come ultima risorsa, cerchiamo pattern @dominio.tld in tutto il testo visibile

Fase 3: filtraggio dei falsi positivi

Questo è probabilmente il passaggio più critico. Un'estrazione aggressiva produce rumore: domini che non sono effettivamente usa e getta. Senza filtraggio, rischiamo di bloccare utenti legittimi: qualcosa che non possiamo permetterci.

La nostra pipeline applica diversi filtri:

  • Lista di esclusione : i principali domini legittimi (gmail.com, outlook.com, ecc.) e i domini infrastrutturali (googleapis.com, cloudflare.com, ecc.) sono sistematicamente esclusi
  • Validazione strutturale : verifichiamo che il dominio abbia un formato valido, un TLD riconosciuto e non assomigli a un asset statico (.js, .css, .png)
  • Verifica DNS : convalidiamo la presenza di record MX per confermare che il dominio possa effettivamente ricevere email
  • Punteggio di confidenza : ogni dominio viene etichettato con ogni fonte che lo ha segnalato. Un dominio visto su più provider indipendenti è quasi certamente usa e getta

Questo filtraggio multi-livello ci permette di mantenere un tasso di falsi positivi molto basso, anche con un'estrazione aggressiva.

Fase 4: deduplicazione e indicizzazione

Gli stessi domini appaiono spesso su più provider. Prima di arricchire il nostro database, uniamo i risultati: ogni dominio viene normalizzato, deduplicato e manteniamo l'elenco completo delle sue fonti.

Il risultato viene indicizzato in un motore di ricerca ottimizzato per query in tempo reale. Quando la nostra API riceve una richiesta di validazione, la ricerca in questo dataset richiede meno di un millisecondo.

Fase 5: monitoraggio e aggiornamenti continui

Il panorama delle email usa e getta cambia costantemente. I domini scompaiono, ne appaiono di nuovi. Eseguiamo questa pipeline automaticamente e con una cadenza regolare per catturare questi cambiamenti.

Ogni esecuzione produce un report: numero di provider elaborati, domini scoperti, eventuali errori. Se un provider cambia la sua interfaccia o blocca le nostre richieste, veniamo avvisati immediatamente e adattiamo la nostra strategia.

I numeri

Oggi, il nostro dataset contiene oltre 380.000 domini usa e getta verificati provenienti da 20+ provider diversi. Alimenta direttamente il campo disposable nella nostra API di validazione email.

Cosa significa per te

Quando chiami GET /v1/intelligence/email con un indirizzo, il campo disposable viene verificato rispetto a questo dataset in tempo reale. Non una lista statica scaricata sei mesi fa: un dataset vivo, aggiornato ogni giorno da pipeline automatizzate.

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']})")

Bloccare le email usa e getta elimina la prima leva che gli attaccanti usano per creare account falsi su larga scala. E tutto inizia con un dataset che regge.

Articoli correlati