From 6f361d307d90970c92d1f3c5bb30fe42951d8a20 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 9 Jun 2026 20:10:54 -0500 Subject: [PATCH] warmup: add Microsoft consumer (hotmail/outlook/live/msn) to cold-mail exclusions Main-pool delivery was stuck ~60-67% (897+ daily spam-blocks). Audit of the main listmonk found ~47k consumer mailboxes still enabled in OLD cold trucking lists (built before the exclusion existed): 19k gmail, 27.5k yahoo-family + Microsoft consumer. gmail alone was 101 of today's 909 550-5.7.1 blocks. Blocklisted all ~47k consumer addresses NOT in the protected FCC lists 3/6 (per the keep-gmails decision for those warm lists). Also added Microsoft consumer domains to BLOCKED_EMAIL_DOMAINS so the daily trucking builder stops re-adding them (Microsoft SmartScreen silently junks/defers cold B2B mail -- a reputation drag even though it doesn't 550 like Google). Enabled base 95455 -> 48707 (real business/ISP domains). --- scripts/_email_exclusions.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/_email_exclusions.py b/scripts/_email_exclusions.py index ded5fa1..fe8e0a5 100644 --- a/scripts/_email_exclusions.py +++ b/scripts/_email_exclusions.py @@ -46,9 +46,22 @@ GOOGLE_CONSUMER_DOMAINS: frozenset[str] = frozenset({ "gmail.com", "googlemail.com", }) +# Microsoft consumer mailboxes (Outlook.com / Hotmail). Microsoft's cold-IP +# filtering (SmartScreen) tends to silently route cold B2B mail to Junk or +# soft-defer rather than hard-bounce, so it is less visible than Google's +# 550-5.7.1 but still a reputation drag (low engagement, spam-folder placement) +# on a warming IP. These are consumer mailboxes, not real B2B carrier contacts, +# so we hold them out of cold/warmup sends like the other consumer providers. +MICROSOFT_CONSUMER_DOMAINS: frozenset[str] = frozenset({ + "hotmail.com", "outlook.com", "live.com", "msn.com", "hotmail.co.uk", + "hotmail.fr", "live.co.uk", "outlook.es", "passport.com", "windowslive.com", +}) + # The full set of consumer domains we refuse to cold-mail. Extend here as we # discover other reputation-sensitive providers. -BLOCKED_EMAIL_DOMAINS: frozenset[str] = YAHOO_FAMILY_DOMAINS | GOOGLE_CONSUMER_DOMAINS +BLOCKED_EMAIL_DOMAINS: frozenset[str] = ( + YAHOO_FAMILY_DOMAINS | GOOGLE_CONSUMER_DOMAINS | MICROSOFT_CONSUMER_DOMAINS +) def domain_of(email: str) -> str: