Suppression isn't just unsubscribes. Six categories:
| Category | Source | Retention |
|---|---|---|
| Hard bounces | KumoMTA bounce classifier | Forever |
| Unsubscribes | List-Unsubscribe handler + web form | Forever |
| Spam complaints (FBL) | ARF reports | Forever |
| Manual complaints (support@) | Human review | Forever |
| Role accounts (postmaster@, abuse@) | Pre-list filter | Forever |
| Region opt-outs (GDPR, CASL) | Compliance API | Per regulation |
Storage: a single suppression service (PostgreSQL or Redis) queried by KumoMTA on every smtp_server_message_received. Reject at SMTP time so senders learn fast.
kumo.on('smtp_server_message_received', function(msg)
if suppression:contains(msg:recipient()) then
kumo.reject(550, "5.7.1 Recipient is on suppression list")
end
end)
Sign in to keep track of what you have read.