1,008 B
1,008 B
Sprint 2.2 — Spam rescue hardening
Status: Done
Backend
- Per-UID matching: Rescuer fetches each spam UID, matches
message-id/ from+subject, moves only matched messages - Folder auto-discovery:
resolveSpamFolder()tries presets then IMAP LIST; persistsspamFolderPathon inbox - Auto-pause:
checkCampaignSpamThresholds()pauses campaigns when 3 consecutive days exceed 30% spam rate (inbox < 70%) - Mailbox metadata:
lastSpamRescuedAtupdated on successful rescue
Dashboard
- Paused campaign alert on dashboard and campaign detail
- High spam rate alert strip (inbox < 70% today)
- Placement stacked bar chart on campaign overview
- Activity badges:
rescued_from_spam,engaged_no_reply - Mailbox detail shows spam folder path and last rescue time
Verification
- Simulate spam placement in test logs
- Run rescuer job from Settings → Jobs
- Confirm per-log rescue status (not bulk sender match)
- After 3 high-spam days, campaign auto-pauses