Most of the time went into things that looked right but were wrong, or looked wrong but were right.
A diagnostic tool that lied about the PTR record
A lookup of the server's PTR record returned a completely different test host name, which looked like a serious mismatch with the HELO name. The cause was the local resolver on the diagnostic workstation: it answered PTR queries from the host file of the machine. In public DNS the record had been correct all along. From then on every DNS check went directly to the authoritative servers and to a public resolver.
Microsoft said the address was not blocked, and rejected mail anyway
This is the bounce a user received; the addresses and the time stamp are anonymised:
<**************@hotmail.com>: host hotmail-com.olc.protection.outlook.com[x.x.x.x]
said: 550 5.7.1 Unfortunately, messages from [x.x.x.x] weren't sent. Please contact your Internet service provider since part of their network is on our block list (S3150). You can also refer your provider to http://mail.live.com/mail/troubleshooting.aspx#errors.
[Name=Protocol Filter Agent][AGT=PFA][MxId=**************] [**************.eurprd04.prod.outlook.com 2026-03-17T08:14:52.316Z **************] (in reply to MAIL FROM command)
The rejections carried the code S3150, while Microsoft's self-service portal insisted that the IP address was not blocked. S3150 means a block on a range of addresses at the hosting provider, not on a single address, and the portal only handles single addresses. The way out was a ticket with Microsoft's support, escalated with facts: SPF, DKIM and DMARC in all domains, clean public blacklists, low volume, authenticated senders only. The confirmation that the block was lifted came 1 hour 18 minutes after the first message to support. DKIM and DMARC do not remove such a block, because Microsoft rejects the connection before it sees the message; complete authentication makes the escalation far stronger.
The server could have started signing incoming spam
With the signing milter enabled globally, as most guides suggest, mail scanned by amavis would have passed through it a second time on its way back into Postfix. Incoming spam with a forged sender from one of the four domains would then have received a valid DKIM signature of that domain. The milters are therefore switched off on the port amavis hands mail back to and on the public port 25.
One tag in a DKIM record, and the TTL
The key test failed with "unknown hash": the h= tag of a DKIM record takes hash names such as sha256, not the name of the signature algorithm. Receivers that follow the specification would have rejected every signature. The record was corrected before the domain signed anything, and the key test became the condition for enabling signing. Because the record had a TTL of a day, resolvers could have cached the wrong version for 24 hours; for the roll-out the TTL was lowered to one hour.
Bounces need SPF for the server's own name
A non-delivery report has an empty envelope sender, so SPF checks the HELO name of the server instead. Without an SPF record for that name, bounces would fail DMARC once the main domain moves to reject, and outside senders would never learn that their mail did not arrive. One record fixed it.