feat(deliverability): exclude Apple consumer mail + scrub stale consumer subs from Listmonk
The fmcsa campaign builders already exclude gmail/yahoo/microsoft/etc. from NEW
audience selections, but two reputation leaks remained on the LIST-BASED side:
1. iCloud/Apple gap. icloud.com/me.com/mac.com were never in the exclusion set.
A 2026-06 Listmonk audit found 1,321 ENABLED iCloud subscribers on list 3
("FCC Carriers - Direct Contacts") -- the single largest enabled-consumer
bucket -- being cold-blasted with no exclusion at all. Add APPLE_CONSUMER_DOMAINS.
2. Stale already-imported consumer subs. List-based campaigns (e.g. the running
CRTC/USF blast on list 3) keep hitting consumer addresses imported BEFORE the
relevant domain joined the exclusion list. gmail.com was still the #1 bounce
domain via that campaign even though new selections exclude it. Add
scrub_listmonk_consumer.py: reconciles the live Listmonk subscriber table
against the authoritative exclusion list and blocklists any ENABLED subscriber
whose address is_blocked(). Idempotent; re-run whenever the exclusion grows so
it applies retroactively. Uses the same 'blocklisted' terminal state as the
bounce handler, so contacts are excluded from all current/future campaigns
without deleting history. Supports --dry-run and both listmonk / listmonk_hc.
This commit is contained in:
parent
49842bddbb
commit
b40fc7ec36
2 changed files with 153 additions and 1 deletions
|
|
@ -57,6 +57,18 @@ MICROSOFT_CONSUMER_DOMAINS: frozenset[str] = frozenset({
|
|||
"hotmail.fr", "live.co.uk", "outlook.es", "passport.com", "windowslive.com",
|
||||
})
|
||||
|
||||
# Apple consumer mailboxes (iCloud Mail / legacy .Mac / MobileMe). Apple is a
|
||||
# pure-consumer provider -- there is no Apple "Workspace" tenant that a real B2B
|
||||
# carrier would run its company mail on, so every one of these is a personal
|
||||
# inbox, not a business contact. iCloud applies aggressive cold-sender filtering
|
||||
# (silent Junk routing plus 5xx rejects on reputation-poor senders) and a 2026
|
||||
# Listmonk audit found iCloud was the single largest enabled-consumer bucket
|
||||
# leaking into list-based campaigns (1,321 enabled subs on list 3 alone). Hold
|
||||
# them out of cold/warmup sends like the other consumer providers.
|
||||
APPLE_CONSUMER_DOMAINS: frozenset[str] = frozenset({
|
||||
"icloud.com", "me.com", "mac.com",
|
||||
})
|
||||
|
||||
# Legal / complaint do-not-contact list. Addresses and domains here must NEVER
|
||||
# be cold-mailed or re-imported, independent of consumer-domain reputation
|
||||
# rules. Add a domain or a specific address when someone makes a formal
|
||||
|
|
@ -106,7 +118,7 @@ DEAD_ISP_DOMAINS: frozenset[str] = frozenset({
|
|||
# discover other reputation-sensitive providers.
|
||||
BLOCKED_EMAIL_DOMAINS: frozenset[str] = (
|
||||
YAHOO_FAMILY_DOMAINS | GOOGLE_CONSUMER_DOMAINS | MICROSOFT_CONSUMER_DOMAINS
|
||||
| DEAD_ISP_DOMAINS | DO_NOT_CONTACT_DOMAINS
|
||||
| APPLE_CONSUMER_DOMAINS | DEAD_ISP_DOMAINS | DO_NOT_CONTACT_DOMAINS
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue