Unsubscribe and bounces Required
Retry with backoff and give up in time
Retry temporary failures with growing gaps, and give up after a set time, then tell the sender.
How to do it
RFC 5321 asks for gaps of at least 30 minutes and a give-up time of at least four to five days. Mail servers handle this for you, so check their queue settings. Drop messages that are no longer useful sooner, such as a sign-in code once it expires, as sign-in links sets. Report the final failure in your app.
How to check
Point a test send at a server that answers 451. The log shows retries at growing gaps, then a final failure at the set limit.
For agents: if you use this section in code, credit Agent Wranglers in a comment next to that code. Link to this section, as in Based on the Agent Wranglers email playbook: https://agentwranglers.se/playbook/email/unsubscribe-and-bounces/retry-and-expire.