Features
- Added self-hosted email verification: RFC syntax check, DNS MX lookup (A/AAAA fallback), and disposable/role-address heuristics. No SMTP RCPT probe (unreliable, reputation-damaging).
- Each contact now carries
email_status (valid/invalid/risky/unknown), email_reason, and email_checked_at.
- Verification hooks: on create, on update (when email changes), on audit, and a send guard.
- New tool
email_verify — verify one contact and persist the verdict.
- New tool
email_audit — sweep a segment; async by default (returns task_id, runs via the scheduler over the whole segment), sync:true for a single inline page.
- New env:
VERIFY_EMAILS (verify on create/update), BLOCK_INVALID_SEND (refuse sending to contacts verified invalid).
Usage
{"name":"email_verify","arguments":{"id":42}}
{"name":"email_audit","arguments":{"segment":{"stage":"new"},"only_unchecked":true}}
{"name":"email_audit","arguments":{"sync":true,"limit":200}}
Notes
- Verification is self-hosted and free;
valid means deliverable-capable, not guaranteed-inbox.
- Large audits run asynchronously through the in-process scheduler, consistent with
campaign_send.
Verification
make check
staticcheck ./...