Email e domini
Verifica DMARC
Copertura: Funziona con domini di qualsiasi paese. Cerchiamo il record come fanno i server di ricezione: nel dominio stesso e, se non ce l’ha, nei suoi domini padre (fino a cinque livelli). Degli indirizzi dei report mostriamo solo il dominio.
Apri lo strumentoIn questa pagina
A cosa serve
Controlla il record DMARC di un dominio: la sua policy (none, quarantine o reject), se è ereditata, a quanta posta si applica, allineamento e report.
Requisiti
Chiunque può leggere queste guide, senza account. Alcuni strumenti richiedono Pro, come indicato in ogni guida.
DMARC dice ai server di ricezione cosa fare con un’email che dice di arrivare da un dominio ma non supera i suoi controlli: consegnarla, mandarla nello spam o rifiutarla. Inserisci un dominio, un indirizzo email o un link e ti mostriamo la sua policy DMARC e cosa significa.
Come usarlo
Scrivi il dominio che vuoi controllare, oppure incolla un indirizzo email o un link: usiamo solo il suo dominio.
Premi «Verifica DMARC». Cerchiamo il suo record in _dmarc e, se non c’è, nei suoi domini padre, come fanno i server di ricezione.
Guarda la policy: «reject» o «quarantine» sul 100% della posta protegge il dominio; «none» si limita a monitorare.
Esempio inventato
Esempio inventato, non una ricerca reale. Non chiamare e non aprire i suoi link.
v=DMARC1; p=reject; rua=mailto:[email protected]Interpretare il risultato
Questo dominio non ha DMARC: Non chiede ai server di ricezione di fermare la posta che si spaccia per lui, quindi è più facile impersonarlo.
Il record DMARC ha degli errori: I server di ricezione possono ignorarlo, e il dominio resta come se non avesse DMARC. I segnali qui sotto dicono cosa non va.
DMARC si limita a monitorare: La policy è «none»: il dominio riceve report, ma la posta falsa a suo nome viene comunque consegnata.
DMARC protegge solo una parte della posta: La policy si applica a una parte della posta che non supera i controlli; il resto viene consegnato come se non ci fosse alcuna policy.
La posta falsa finisce nello spam: La policy è «quarantine»: i server di ricezione mandano nella cartella dello spam la posta che non supera i controlli.
La posta falsa viene rifiutata: La policy è «reject»: i server di ricezione rifiutano la posta che si spaccia per questo dominio. È la protezione più forte.
none: solo monitoraggio
quarantine: invio nello spam
reject: rifiuto della consegna
Limiti
Leggiamo i record DNS pubblici del dominio. Se inserisci un indirizzo email o un link, dal tuo browser esce solo il suo dominio. Non salviamo il dominio che cerchi.
Risoluzione dei problemi
Non sembra un dominio pubblico. Prova con qualcosa come example.com.
Il DNS non ha risposto in tempo. Riprova tra qualche secondo.
Hai fatto molti controlli di fila. Aspetta un minuto e riprova.
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.
La policy DMARC di un dominio (RFC 7489, con la risalita DMARCbis ai domini padre): il record, dove è stato trovato, la policy effettiva (none, quarantine o reject), la percentuale, l’allineamento DKIM e SPF e i domini che ricevono i report, mai un indirizzo completo. 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/dmarc-check
POST https://api.nocall.io/v2/tools {"tool":"dmarc-check","domain":"example.com"}Parametri
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| domain | string (1–320) | Sì | Un dominio, oppure un indirizzo email o un link di cui si usa il dominio, fino a 320 caratteri. Solo nomi pubblici: indirizzi IP, nomi con una sola etichetta e nomi a uso speciale (.local, .internal, .test…) danno un 422. |
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/dmarc-check' \
--header "Authorization: Bearer $NOCALL_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $REQUEST_ID" \
--data '{"domain":"example.com"}'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/dmarc-check',
method='POST',
data=json.dumps({'domain': 'example.com'}).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/dmarc-check', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + apiKey,
'Content-Type': 'application/json',
'Idempotency-Key': requestId,
},
body: JSON.stringify({ domain: 'example.com' }),
});
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": "dmarc-check",
"result": {
"domain": "example.com",
"domainAscii": "example.com",
"found": true,
"record": "v=DMARC1; p=none; rua=mailto:[email protected]",
"foundAt": "example.com",
"inherited": false,
"policy": "none",
"subdomainPolicy": null,
"effectivePolicy": "none",
"percentage": 100,
"alignment": {
"dkim": "relaxed",
"spf": "relaxed"
},
"reports": {
"aggregate": [
"example.com"
],
"failure": []
},
"signals": [
"policy_none"
],
"valid": true,
"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 |
|---|---|---|
| domain | string | Il dominio in Unicode. |
| domainAscii | string | Lo stesso dominio in ASCII (punycode), come lo vede il DNS. |
| found | boolean | Se al dominio si applica un record DMARC (il suo o quello di un dominio padre). |
| record | string | null | Il record DMARC; null se non ce n’è nessuno o ce n’è più di uno. |
| foundAt | string | null | Il dominio il cui record _dmarc si applica (questo o un dominio padre), in Unicode. |
| inherited | boolean | Se il record è di un dominio padre (risalita dell’albero DMARCbis). |
| policy | "none" | "quarantine" | "reject" | null | Il tag p=: none, quarantine o reject. |
| subdomainPolicy | "none" | "quarantine" | "reject" | null | Il tag sp=, oppure null. |
| effectivePolicy | "none" | "quarantine" | "reject" | null | Ciò che si applica a questo dominio: p, oppure sp se il record è ereditato. |
| percentage | integer (0–100) | pct: la parte della posta che non supera i controlli a cui si applica la policy, 100 se assente. |
| alignment | object | L’allineamento DKIM e SPF (adkim e aspf): relaxed o strict. |
| reports | object | I domini che ricevono i report aggregati (rua) e sugli errori (ruf); mai un indirizzo completo. |
| signals | array<"no_dmarc" | "multiple_records" | "syntax_error" | "policy_none" | "partial_percentage" | "no_aggregate_reports" | "inherited" | "weaker_subdomain_policy"> | no_dmarc, multiple_records, syntax_error, policy_none, partial_percentage, no_aggregate_reports, inherited o weaker_subdomain_policy. |
| valid | boolean | Se il record si può analizzare e ha una policy. |
| attention | boolean | Se il risultato merita un controllo: nessun DMARC, un record non valido, la policy none o una percentuale inferiore a 100. |
Domande frequenti
Che cos’è DMARC?
Domain-based Message Authentication, Reporting and Conformance: un record DNS che dice ai server di ricezione cosa fare con la posta che usa un dominio in «Da» ma non supera SPF e DKIM. Chiede anche dei report, così il proprietario vede chi invia posta a nome del dominio.
Cosa significano none, quarantine e reject?
«none» si limita a monitorare: la posta viene consegnata come sempre e il proprietario riceve report. «quarantine» manda nello spam la posta che non supera i controlli. «reject» la rifiuta. Di solito i domini partono da «none», leggono i report e salgono gradualmente fino a «reject».
Se un dominio ha DMARC, tutta la sua posta è autentica?
No. DMARC rende difficile usare quel dominio esatto in «Da», ma un truffatore può registrare un dominio simile con il suo DMARC. Controlla il dominio del mittente lettera per lettera, oppure incolla le intestazioni in «Questa email è autentica?».
Perché dice che il record è ereditato?
Un sottodominio senza un record proprio (mail.example.com) usa quello del suo dominio padre (example.com), con la policy dei sottodomini (sp) se ce l’ha.
