Link, siti ed email
Questa email è autentica?
Copertura: Funziona con email di qualsiasi paese e in qualsiasi lingua: legge il controllo SPF, DKIM e DMARC che il tuo provider (Gmail, Outlook, Yahoo, iCloud e altri) registra nelle intestazioni quando riceve il messaggio, e controlla il nome e il dominio del mittente con le regole sui marchi di NoCall per questa edizione.
Apri lo strumentoIn questa pagina
A cosa serve
Incolla le intestazioni di un’email sospetta per controllare se il tuo provider di posta ha verificato il mittente (SPF, DKIM e DMARC), se il nome imita un marchio e dove vanno davvero le risposte.
Requisiti
Chiunque può leggere queste guide, senza account. Alcuni strumenti richiedono Pro, come indicato in ogni guida.
Un’email può mostrare qualsiasi nome nel campo «Da». Quello che è molto più difficile da falsificare sono i controlli che il tuo provider di posta fa quando la riceve. Incolla qui le intestazioni del messaggio e ti diciamo se il mittente è chi dice di essere. Non viene inviato né salvato nulla.
Come usarlo
Gmail: apri l’email, tocca i tre puntini e scegli «Mostra originale». Copia tutto il testo.
Outlook: apri l’email, clicca sui tre puntini, poi su «Visualizza» e «Visualizza origine messaggio» (View message source) o «Visualizza dettagli messaggio».
Apple Mail: apri l’email e scegli «Vista», «Messaggio» e «Formato sorgente».
Yahoo Mail: apri l’email, clicca su «Altre opzioni» e poi su «Visualizza messaggio originale».
Controlla il mittente
Esempio inventato
Esempio inventato, non una ricerca reale. Non chiamare e non aprire i suoi link.
From: "Bank" <[email protected]>Interpretare il risultato
Non fidarti di questa email: Il tuo provider non è riuscito a confermare il mittente, oppure l’email imita un marchio. Non cliccare sui link, non scaricare gli allegati e non rispondere. Se dice di essere un’azienda, vai sul suo sito o nella sua app scrivendo tu l’indirizzo.
Controlla questa email con attenzione: Il mittente è verificato, ma alcuni dettagli meritano un controllo prima di rispondere o cliccare su un link.
Il mittente è verificato: Il tuo provider di posta ha controllato che l’email arriva dal dominio indicato in «Da». Questo non garantisce che il contenuto sia autentico: resta diffidente se ti chiede dati o pagamenti.
Limiti
Controllato nel tuo browser: le intestazioni non vengono inviate né salvate, e il risultato mostra solo domini, mai indirizzi completi.
Risoluzione dei problemi
Non abbiamo trovato intestazioni email nel testo. Copia il messaggio originale completo, non solo il corpo.
Le intestazioni non hanno un mittente (From). Copia il messaggio originale completo.
Le intestazioni sono troppo lunghe per controllarle (al massimo 64 KB).
Usare con l’API
Richiede una API key e dei crediti. Ogni chiamata completata costa 1 credito, anche quando non ci sono dati. Un account Pro attivo include 20 crediti per mese solare UTC, condivisi da tutte le rotte API e consumati per primi; i crediti mensili non usati non passano al mese successivo. I crediti acquistati nella pagina del tuo account funzionano senza Pro e non scadono mai.
Gli errori non vengono mai addebitati: 401 invalid_api_key (chiave mancante o non valida), 403 pro_required (nessun credito Pro e nessun credito acquistato), 422 input non valido, 429 quota_exceeded (crediti esauriti), rate_limit_exceeded o ai_busy (l’IA di sms-check è al limite della capacità), 503 tool_warming (i dati sono ancora in preparazione) o tool o provider non disponibile. Dopo un 429 o un 503, riprova quando sono trascorsi i secondi indicati nell’intestazione Retry-After.
Se il provider che ha ricevuto un’email l’ha autenticata (SPF, DKIM e DMARC dall’Authentication-Results più in alto) e gli indizi sul mittente: un marchio nel nome visualizzato, domini di posta gratuita o che ne imitano altri, risposte verso un altro dominio. Solo domini; non viene salvato nulla.
Invia il corpo JSON alla rotta specifica del tool, oppure a POST /v2/tools aggiungendo il campo tool. Entrambe le rotte restituiscono lo stesso risultato.
POST https://api.nocall.io/v2/email-headers
POST https://api.nocall.io/v2/tools {"tool":"email-headers","headers":"Delivered-To: [email protected]\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <[email protected]>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass [email protected] header.s=s1; spf=pass (google.com: domain of [email protected] designates 192.0.2.10 as permitted sender) [email protected]; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: \"Bank Alerts\" <[email protected]>\nReply-To: [email protected]\nSubject: Your statement is ready\nMessage-ID: <[email protected]>","country":"ES"}Parametri
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| headers | string (1–65536) | Sì | Le intestazioni originali dell’email («Mostra originale»), fino a 64 KB; tutto ciò che segue la prima riga vuota viene ignorato. |
| country | string (enum, 55) | No (predefinito: "ES") | Paese di cui si usa il set di regole SMS. |
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/email-headers' \
--header "Authorization: Bearer $NOCALL_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $REQUEST_ID" \
--data '{"headers":"Delivered-To: [email protected]\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <[email protected]>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass [email protected] header.s=s1; spf=pass (google.com: domain of [email protected] designates 192.0.2.10 as permitted sender) [email protected]; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: \"Bank Alerts\" <[email protected]>\nReply-To: [email protected]\nSubject: Your statement is ready\nMessage-ID: <[email protected]>","country":"ES"}'import json
import os
import urllib.request
import uuid
api_key = os.environ.get('NOCALL_API_KEY')
if not api_key:
raise SystemExit('Set NOCALL_API_KEY')
request = urllib.request.Request(
'https://api.nocall.io/v2/email-headers',
method='POST',
data=json.dumps({'headers': 'Delivered-To: [email protected]\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <[email protected]>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass [email protected] header.s=s1; spf=pass (google.com: domain of [email protected] designates 192.0.2.10 as permitted sender) [email protected]; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: "Bank Alerts" <[email protected]>\nReply-To: [email protected]\nSubject: Your statement is ready\nMessage-ID: <[email protected]>', 'country': 'ES'}).encode(),
headers={
'Authorization': 'Bearer ' + api_key,
'Content-Type': 'application/json',
'Idempotency-Key': str(uuid.uuid4()),
},
)
with urllib.request.urlopen(request, timeout=30) as response:
result = json.load(response)
print(result['data']['result'], result['meta']['unitsCharged'])import { randomUUID } from 'node:crypto';
const requestId = randomUUID();
const apiKey = process.env.NOCALL_API_KEY;
if (!apiKey) throw new Error('Set NOCALL_API_KEY');
const response = await fetch('https://api.nocall.io/v2/email-headers', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + apiKey,
'Content-Type': 'application/json',
'Idempotency-Key': requestId,
},
body: JSON.stringify({ headers: 'Delivered-To: [email protected]\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <[email protected]>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass [email protected] header.s=s1; spf=pass (google.com: domain of [email protected] designates 192.0.2.10 as permitted sender) [email protected]; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: "Bank Alerts" <[email protected]>\nReply-To: [email protected]\nSubject: Your statement is ready\nMessage-ID: <[email protected]>', country: 'ES' }),
});
const result = await response.json();
if (!response.ok) throw new Error(result.error?.code ?? 'request_failed');
console.log(result.data.result, result.meta.unitsCharged);Esempio di risposta (200)
Questo è l’esempio documentato nel riferimento API. Le ricerche usano un numero fittizio, mentre aggregati e risposte dell’IA mostrano la struttura del risultato, non dati reali.
{
"data": {
"tool": "email-headers",
"result": {
"fromDomain": "bank.example",
"fromDomainAscii": "bank.example",
"displayName": "Bank Alerts",
"replyToDomain": "other.example",
"returnPathDomain": null,
"senderDomain": null,
"subject": "Your statement is ready",
"auth": {
"provider": "mx.google.com",
"source": "authentication_results",
"spf": "pass",
"spfDomain": "bank.example",
"dkim": "pass",
"dkimDomains": [
"bank.example"
],
"dmarc": "pass",
"dmarcDomain": "bank.example",
"compauth": null,
"aligned": true
},
"authenticated": true,
"brand": null,
"official": false,
"freeMail": false,
"signals": [
"reply_to_mismatch"
],
"attention": true
}
},
"meta": {
"requestId": "req_example",
"unitsCharged": 1,
"usage": {
"periodStart": "2026-10-01",
"unitLimit": 20,
"unitsUsed": 3,
"unitsRemaining": 17
}
}
}Campi del risultato (data.result)
| Campo | Tipo | Descrizione |
|---|---|---|
| fromDomain | string | Il dominio di From in Unicode; mai un indirizzo completo. |
| fromDomainAscii | string | Il dominio di From come lo vedono i sistemi di posta (punycode). |
| displayName | string | null | Il nome visualizzato, con qualsiasi parte locale di un indirizzo email e qualsiasi indirizzo IP sostituiti da …, o null. |
| replyToDomain | string | null | Il dominio a cui vanno le risposte, o null. |
| returnPathDomain | string | null | Il dominio a cui vanno gli avvisi di consegna, o null. |
| senderDomain | string | null | Il dominio del campo Sender, o null. |
| subject | string | null | L’oggetto decodificato, con le parti locali e gli indirizzi IP sostituiti da …, o null. |
| auth | object | I risultati del provider: provider, source, spf, dkim e dmarc (pass, fail, softfail, neutral, none, temperror, permerror o policy) con i loro domini, compauth e se sono allineati con il dominio di From. |
| authenticated | boolean | Se il provider ha verificato che l’email arriva dal dominio di From (DMARC pass o un DKIM pass allineato). |
| brand | string | null | Il marchio citato nel nome visualizzato o nell’oggetto, o null. |
| official | boolean | Se l’host è un dominio ufficiale di un marchio o di un ente pubblico. |
| freeMail | boolean | Se il dominio di From è un servizio di posta gratuito a cui chiunque può iscriversi. |
| signals | array<string (enum, 15)> | no_auth_results, dmarc_fail, dmarc_none, spf_fail, dkim_fail, dkim_unaligned, return_path_mismatch, reply_to_mismatch, display_name_brand, display_name_address, free_mail_brand, lookalike_domain, suspicious_domain, risky_tld o multiple_from. |
| attention | boolean | Se il contenuto merita un controllo più attento. |
Domande frequenti
Cosa sono SPF, DKIM e DMARC?
Sono i controlli che il tuo provider di posta esegue quando riceve un’email: SPF verifica se il server che l’ha inviata è autorizzato, DKIM verifica una firma del dominio e DMARC conferma che tutto corrisponde al dominio che vedi in «Da». Se DMARC non viene superato, il mittente è falso.
Se il mittente è verificato, l’email è sicura?
Non sempre. Verificato significa che arriva da quel dominio, ma un truffatore può usare un dominio suo simile a quello di un marchio, oppure un account violato. Guarda anche il dominio indicato e diffida di qualsiasi richiesta di dati o pagamenti.
Perché il nome del mittente non basta?
Perché il nome visualizzato lo scrive chi invia l’email e può dire qualsiasi cosa, perfino il nome della tua banca o un indirizzo falso tra virgolette. Quello che conta è il dominio verificato.
