Every result carries one of eight statuses. Code that only handles four of them will fall through on real traffic.
The eight statuses
valid
The mail server accepted this mailbox, and a test showed the domain does not accept every address.
invalid
The address cannot receive mail: it is malformed, the domain does not exist or has no mail server, or the server rejected the mailbox.
risky
The mailbox was not confirmed and something is against it: the server blocked the check, the mailbox is full, or the catch-all test could not finish.
unknown
No verdict yet: no mail server could be reached, the connection dropped or timed out, the server greylisted or deferred the check, the check ran out of time, a DNS lookup failed for a moment, or the mailbox check was skipped.
catch_all
The domain, or its mail provider, accepts mail for every address, so a yes from the server proves nothing about this mailbox.
disposable
The domain belongs to a throwaway-mail service. The mailbox may work today and be gone tomorrow.
role
A shared address such as info@ or support@, read by a team rather than a person.
spam_trap
Reserved. Kawaa’s reviewed trap-domain list is empty, so no check since September 22, 2026 returns this status. A stored result from before then can still carry it.
sub_status names the reason behind each one, for example policy_block under risky or greylisted under unknown. It is usually absent on disposable and spam_trap, where the status is the reason. The exception is a check where the domain’s DNS lookup failed: that result carries temporary_failure, because the verdict stands but the domain checks beside it were not measured. See Understanding verification results for every value.
Recommendations
| Status | Action |
|---|---|
valid | Send |
invalid | Remove from list |
risky | Read sub_status, then send with caution or skip |
unknown | Retry later; it is not a verdict on the address |
catch_all | Keep only with other evidence the person is real; expect some bounces |
disposable | Block at signup; remove from marketing lists |
role | Leave out of marketing; fine for transactional mail if sub_status is mailbox_exists |
spam_trap | Verify the address again; no check since September 22, 2026 returns it |