Dependencies
- Email providers: Resend, SendPulse, Brevo, Mailjet, Mailtrap, plus SMTP.
- Resilience4j circuit breaker per provider.
- Redis stream listener.
- Spring Mail on the local profile.
Timeouts and circuit breakers belong on the client adapter, not in the use case. A failed downstream call for a non-critical side effect should become an outbox or inbox retry, not a user-facing 500, when the business write has already committed.