Email e domini
Verifica DKIM
Copertura: Funziona con domini di qualsiasi paese. Senza selettore proviamo quelli predefiniti dei grandi provider (Google, Microsoft 365, Zoho, Proton, Fastmail, Mailchimp e altri) e i nomi generici più comuni, 33 in tutto. Le chiavi vengono lette come fanno i server di ricezione (RFC 6376): RSA ed Ed25519.
Apri lo strumentoIn questa pagina
A cosa serve
Controlla le chiavi DKIM di un dominio con un selettore o con i più comuni: tipo di ogni chiave, dimensione in bit e se è in prova o ritirata.
Requisiti
Chiunque può leggere queste guide, senza account. Alcuni strumenti richiedono Pro, come indicato in ogni guida.
DKIM permette a un dominio di firmare la sua posta con una chiave pubblicata nel DNS, così i server di ricezione possono verificare che un messaggio arrivi da quel dominio e non sia stato alterato. Ogni chiave si trova sotto un nome chiamato selettore. Inserisci un dominio e, se lo conosci, il selettore; senza selettore proviamo 33 selettori comuni.
Come usarlo
Apri un’email inviata da quel dominio e mostra l’originale o le intestazioni (in Gmail: i tre puntini, poi «Mostra originale»).
Cerca l’intestazione «DKIM-Signature»: «d=» è il dominio e «s=» è il selettore, per esempio s=selector1.
Inserisci il dominio e il selettore e premi «Verifica DKIM». Senza selettore ne proviamo 33 comuni, come default, google, selector1 o k1.
Esempio inventato
Esempio inventato, non una ricerca reale. Non chiamare e non aprire i suoi link.
selector1._domainkey.example.comInterpretare il risultato
Il dominio firma la sua posta con DKIM: Abbiamo trovato la sua chiave pubblica: i server di ricezione possono verificare che i suoi messaggi arrivino da questo dominio e non siano stati alterati lungo il percorso.
Ci sono chiavi DKIM, con avvisi: Abbiamo trovato almeno una chiave, ma alcune sono ritirate, in prova o troppo deboli. Trovi i dettagli sotto ogni chiave.
Nessuna chiave DKIM nei selettori comuni: Questo non dimostra che il dominio non usi DKIM: può usare un altro selettore. Lo trovi nell’intestazione «DKIM-Signature: s=» di un’email che ti ha inviato. Scrivilo in «Selettore» e ricontrolla.
Nessuna chiave DKIM in quel selettore: Controlla come è scritto: il selettore è il valore «s=» dell’intestazione «DKIM-Signature» e il dominio è il suo valore «d=».
La chiave è vuota (p=): questo selettore è ritirato e non firma più la posta.
La chiave è in modalità di prova (t=y): il dominio chiede ai server di ricezione di non intervenire se la firma non è valida.
La chiave RSA è più corta di 1024 bit: può essere violata e molti server di ricezione non la accettano.
La chiave RSA è di 1024 bit: è ancora accettata, ma si consigliano 2048.
La chiave consente solo SHA-1, un algoritmo vecchio che non è più considerato sicuro.
Il record della chiave ha un errore e non si può leggere.
Il tipo di chiave non è né RSA né Ed25519, quindi i server di ricezione non possono usarla.
Limiti
Questo non dimostra che il dominio non usi DKIM: può usare un altro selettore. Lo trovi nell’intestazione «DKIM-Signature: s=» di un’email che ti ha inviato. Scrivilo in «Selettore» e ricontrolla.
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.
Un selettore può contenere solo lettere, numeri, trattini, trattini bassi e punti.
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.
Le chiavi DKIM di un dominio in un selettore, o in circa 33 selettori comuni se non se ne indica nessuno: il tipo di ogni chiave (rsa o ed25519), la dimensione in bit e se è in prova o revocata. none_found non dimostra che il dominio non abbia DKIM: può usare un altro selettore. 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/dkim-check
POST https://api.nocall.io/v2/tools {"tool":"dkim-check","domain":"example.com","selector":"s1"}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. |
| selector | string (1–120) | No | Il selettore: il tag s= di un’intestazione DKIM-Signature, fino a 120 caratteri. Senza, si provano circa 33 selettori comuni. |
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/dkim-check' \
--header "Authorization: Bearer $NOCALL_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $REQUEST_ID" \
--data '{"domain":"example.com","selector":"s1"}'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/dkim-check',
method='POST',
data=json.dumps({'domain': 'example.com', 'selector': 's1'}).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/dkim-check', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + apiKey,
'Content-Type': 'application/json',
'Idempotency-Key': requestId,
},
body: JSON.stringify({ domain: 'example.com', selector: 's1' }),
});
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": "dkim-check",
"result": {
"domain": "example.com",
"domainAscii": "example.com",
"selectorGiven": true,
"selectorsTried": 1,
"keys": [
{
"selector": "s1",
"keyType": "rsa",
"keyBits": 2048,
"testing": false,
"revoked": false,
"valid": true,
"signals": []
}
],
"signals": [],
"attention": false
}
},
"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. |
| selectorGiven | boolean | Se è stato indicato un selettore; altrimenti sono stati provati quelli comuni. |
| selectorsTried | integer | Quanti selettori sono stati consultati. |
| keys | array<object> | Ogni selettore che pubblica una chiave: selector, keyType (rsa o ed25519), keyBits (256 per ed25519), testing (t=y), revoked (un p= vuoto), valid e i suoi segnali (revoked_key, testing_mode, weak_key, short_key, sha1_only, syntax_error o unknown_key_type). |
| signals | array<"none_found"> | none_found: nessuna chiave nel selettore indicato né in alcun selettore comune (potrebbe comunque essere in uso un altro selettore). |
| attention | boolean | Se il risultato merita un controllo: nessuna chiave trovata, oppure una chiave non valida, revocata, in prova o debole. |
Domande frequenti
Che cos’è DKIM?
DomainKeys Identified Mail: il server che invia firma ogni email con una chiave privata e il dominio pubblica la chiave pubblica nel DNS. Il server che la riceve verifica la firma: se corrisponde, l’email arriva da quel dominio e non è stata modificata lungo il percorso.
Che cos’è un selettore?
Il nome con cui viene pubblicata una chiave, in selector._domainkey.example.com. Un dominio può averne diversi, uno per provider o per ogni cambio di chiave. Compare come «s=» nell’intestazione «DKIM-Signature» di ogni email.
Perché non trova nessuna chiave se il dominio usa DKIM?
I selettori possono avere qualsiasi nome e il DNS non permette di elencarli. Ne proviamo 33 comuni; se il dominio ne usa un altro, scrivilo in «Selettore». Per questo «non trovata» non dimostra che non ci sia DKIM.
Cosa significano 1024 e 2048 bit?
La dimensione della chiave RSA: più è lunga, più è difficile da violare. Una chiave da 1024 bit è ancora accettata, ma la dimensione consigliata è 2048. Sotto 1024, molti server di ricezione ignorano la firma.
