feat(deliverability): burner-domain list verification + plan doc
The smtp_valid pool is only ~3k unsent — too small to sustain campaigns. SMTP probing can't confirm catch-all/mx_unreachable deliverability; only a REAL send can. burner_list_verify.py reconciles a verification send from a DISPOSABLE burner domain (isolated from PW/carrierone reputation): - hard bounce -> fmcsa_carriers.email_verify_result='hard_bounced' (excluded) - delivered -> 'send_confirmed' (proven deliverable; PW campaigns send to it) It tails the burner MTA mail.log (reuses bounce-watcher's status= pattern) and writes back idempotently. The PW trucking filter now treats smtp_valid + send_confirmed as sendable. docs/campaign-deliverability-plan.md captures the full diagnosis, the burner design, and CAN-SPAM guardrails. Remaining (needs a domain + isolated MTA identity — operator/infra decision): stand up the burner domain, the verification-send worker, and a writeback cron.
This commit is contained in:
parent
1652a3b8bc
commit
c2737f2001
3 changed files with 258 additions and 5 deletions
|
|
@ -339,11 +339,13 @@ REPLY_TO_HEADERS = [{"name": "Reply-To", "value": REPLY_TO_EMAIL}]
|
|||
# blocklisted). So 'mx_unreachable' and all error/reject results are excluded.
|
||||
#
|
||||
# Recovery mode (default ON while reputation is damaged): send ONLY 'smtp_valid'
|
||||
# — addresses an MX explicitly accepted at RCPT time — to drive the bounce rate
|
||||
# to near-zero and rebuild sender reputation. Once recovered, set
|
||||
# CAMPAIGN_INCLUDE_CATCH_ALL=1 to re-add catch-all domains (which accept at SMTP
|
||||
# time but can still bounce later, so they stay out during recovery).
|
||||
_SENDABLE_RESULTS = ["smtp_valid"]
|
||||
# — addresses an MX explicitly accepted at RCPT time — plus 'send_confirmed'
|
||||
# (addresses proven deliverable by a real burner-domain verification send; see
|
||||
# docs/campaign-deliverability-plan.md). This drives the bounce rate to near-zero
|
||||
# and rebuilds sender reputation. Once recovered, set CAMPAIGN_INCLUDE_CATCH_ALL=1
|
||||
# to re-add catch-all domains (which accept at SMTP time but can still bounce
|
||||
# later, so they stay out during recovery). 'hard_bounced' is NEVER sendable.
|
||||
_SENDABLE_RESULTS = ["smtp_valid", "send_confirmed"]
|
||||
if os.getenv("CAMPAIGN_INCLUDE_CATCH_ALL", "0") not in ("0", "false", ""):
|
||||
_SENDABLE_RESULTS += ["catch_all_domain", "catch_all_detected"]
|
||||
USABLE_FILTER = (
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue