Error handling
Every provider throws the same normalised PostboiError on failure — HTTP errors,
provider error envelopes, timeouts, and network failures all funnel through it. Error
handling is identical no matter which provider you use, and the original provider payload is
kept on .raw.
Retries
Every provider accepts retries, retry_delay, and timeout:
Retries fire on 429, 5xx, and network errors. The delay doubles each attempt
(exponential backoff).
Retries are off by default on purpose. Retrying a send that already reached the provider can deliver a duplicate email, so enable
retriesonly alongside anidempotency_key(where the provider supports it).