Branch on the overall result first
Use deliverable / undeliverable / risky / unknown as your primary switch. That keeps form UX and CRM rules simple.
Then consult flags (disposable, role, free, accept-all) for policy exceptions—for example allowing role addresses for B2B sales but not for consumer newsletters.
Log reason codes for support
When a legitimate user is blocked, support needs the reason code and timestamp—not only a boolean fail.
Keep raw provider context in logs (with retention limits) so edge cases can be audited.