<source>
A permanent check error does not mean “sending is not allowed” but “the record could not be parsed”: a syntax error, an invalid construct, too many nested lookups. The default is to reject such a message with a permanent refusal.
You reject because of someone else’s typo. The domain owner forbade nothing; they simply made a mistake when publishing the record. There are more messages from such domains than it seems: complex records with nested references break often and without the owner noticing.
Exceeding the limit on empty DNS responses leads here too — it is controlled by check-spf-inbound-max-void-lookups, and its default is small.
It makes more sense not to reject. The result will end up in a header anyway, and the decision can be made further down the chain — already knowing the message contents.
Rejecting makes sense with a stream of forgeries. An unreadable record for a domain that dozens of messages a minute claim to come from is a signal in itself.
Check the empty response limit. Some of these errors come not from the sender’s record but from your own threshold.
# we record someone else's typo in a header but accept the message <source 0/0> check-spf-inbound true reject-spf-check-fail true reject-spf-check-permerror false</source>
what people get wrong and how it ends2 mistakes▶
our experience
§ 3.3.7.24
2 relations
grep -n reject-spf-check-permerror /etc/pmta/config grep -ci 'permerror' /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.