Knowledge base

The name lookup did not complete — and no conclusion is drawn

StatusDnsQueryFailed
The most informative of the five — it explains the vendor’s decision

The receiver’s name did not resolve. Usually this is a timeout: either the local resolver did not respond, or it did not get a response from others itself.

🔑 And the engine deliberately does not bounce the message on such a failure. That is the whole point. No answer is not the same as the answer “the domain does not exist”: in the first case we learned nothing, in the second we learned that the domain does not exist.

The vendor’s decision is right and worth copying. Bouncing a message when we could not ask means punishing the recipient for a problem on our side or in the network.

A practical sign: such failures come in batches and across many domains at once — there is one resolver for the whole node. A failure for one domain while the others work means something else.

The main trap is taking it for the receiver’s problem. The failure looks like a delivery problem to a domain, but the cause is on our side: the resolver. An investigation started from the receiver’s side will find nothing, because everything is fine there.
What the Hub does. It does not distinguish it separately — the failure lands in the transport category.

⚠️ But it would be worth distinguishing: this is the only one of the five failures that speaks about our node, not about the receiver. The sign is recognizable — a burst of failures across many domains on one node at once, while neighboring nodes have none.

The resolver requirement is written in the node preparation: it must be reachable and recursive (prepare-host). The Hub’s preflight checks do not include this check.

Recommended values

How to tell the resolver is the problem:

Observation Conclusion
failures across many domains on one node at once the resolver
neighboring nodes have none this particular node’s resolver
a failure for one domain, the rest go through not the resolver, but the domain itself

Messages are not lost meanwhile — the engine does not bounce them, and after the resolver recovers they will go out.

Check the resolver with a query from the node itself, not by the presence of a line in the settings: a configured but non-recursive resolver looks set up and does not work.

The distinction table and the advice to check with a query are ours. From the manual here come the cause of the failure and the fact that the engine deliberately does not bounce messages on it.
Example configuration
# check the resolver, not the receiver
pmta resolve gmail.com MXdig +short @127.0.0.1 gmail.com MX
The highlighted line asks through the engine’s own eyes — this is the final answer to whether the node resolves names. An empty response means the resolver is unavailable or not recursive.
yellow — — directive names, blue — blocks. They are highlighted the same way in the text of the card.
Compatibility
PowerMTA 6.0
described in the manual of this version · platform: any
The vendor does not state the first version for every directive — there is no note here. The name also appears in the 5.0 edition of the manual.
In the Hub
Cost of a mistake
reversible: harms only while it is set
Scenarios
Bounce classification · Untangle a stuck queue