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: