<source>
A temporary error means that the check could not be performed: the resolver did not respond, the query did not get through, the sender domain’s name server is unavailable. It has nothing to do with the message itself.
The refusal here is temporary too — the only one of the three. The sender is invited to try again later rather than refused permanently. The default is to reject.
The cause is often on your side. The node’s own resolver does not always respond; SPF checking loads it more than anything else, because one record can pull a dozen queries along with it.
The default is defensible. A temporary refusal does not lose the message — the sender will retry.
But look at the resolver first. If it responds intermittently, the enabled check will turn that into receiving refusals.
Count the share of such outcomes. Its growth is a sign of a malfunction on your side, not the senders’.
# a temporary refusal does not lose the message — the sender will retry <source 0/0> check-spf-inbound true reject-spf-check-temperror true</source>
what people get wrong and how it ends1 mistake▶
our experience
2 relations
grep -n reject-spf-check-temperror /etc/pmta/config grep -ci 'temperror' /var/log/pmta/pmta.log
3 articles
◇Two inbound report processors and what to do with themBounces by message and complaints are parsed by two identically structured blocks; each has its own address list and its own pair of decisions about the message’s fate.◇What to do with an accepted messageWhat the node does with an accepted inbound message: forwards it, writes it to a file, discards it, passes it to a program or parses it as a bounce or complaint.◇Who is allowed to submit mail and for whom to accept itOut of the box, the node accepts submission only from the machine itself; two different questions — “who can send through us” and “for whose addresses we accept mail” — are answered by different directives.