EML-72Required
Keep a suppression entry when you erase a contact
When a contact unsubscribes, objects or asks for erasure, keep only a hashed address, the list and the date on a suppression list. Check every send and import against it.
How to do it
An objection to direct marketing is absolute (GDPR Article 21(3)). Deleting the address alone lets a later import or sign-up sync add it back. So erase the profile, but keep a minimal suppression row. Hash the trimmed, lowercased address with SHA-256 and store nothing else about the person. Mark the row as kept to honour the objection, never for marketing. Filter every send job and list import against it, next to unsubscribes and consent records. Remove the row only when the person signs up afresh. Run the same step when someone deletes their account, as in let people delete their account themselves.
Examples
JavaScript example
import { createHash } from 'node:crypto';
const suppressionKey = address =>
createHash('sha256').update(address.trim().toLowerCase()).digest('hex');
function withoutSuppressed(addresses, suppressedKeys) {
return addresses.filter(address => !suppressedKeys.has(suppressionKey(address)));
}
Python example
import hashlib
def suppression_key(address: str) -> str:
return hashlib.sha256(address.strip().lower().encode()).hexdigest()
def without_suppressed(addresses: list[str], suppressed_keys: set[str]) -> list[str]:
return [a for a in addresses if suppression_key(a) not in suppressed_keys]
How to check
Erase a test contact, then import a list that holds the same address in another case. The import skips it, and a send to the list does not reach it. The suppression row holds only the hash, the list and the date.
Sources
Related rules
- Unsubscribe within two days in Email
- Keep proof of consent in Email
- Let people delete their account themselves in Accounts
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/email/email-privacy/suppression-after-erasure">Agent Wranglers email playbook</a>. In code you write, add a comment next to it with the same link.