pub async fn dispatch_mail_outbox<R, E, List, ListFut, Claim, ClaimFut, Deliver, DeliverFut, MarkSent, MarkSentFut, MarkRetry, MarkRetryFut, MarkFailed, MarkFailedFut, OnSent, OnSentFut, OnFailed, OnFailedFut>(
config: &MailOutboxDispatchConfig,
list_claimable: List,
try_claim: Claim,
deliver: Deliver,
mark_sent: MarkSent,
mark_retry: MarkRetry,
mark_failed: MarkFailed,
on_sent: OnSent,
on_failed: OnFailed,
) -> Result<DispatchStats, E>where
R: MailOutboxDispatchRow,
E: Display,
List: FnMut(u64, i64) -> ListFut,
ListFut: Future<Output = Result<Vec<R>, E>>,
Claim: FnMut(i64) -> ClaimFut,
ClaimFut: Future<Output = Result<bool, E>>,
Deliver: FnMut(R) -> DeliverFut,
DeliverFut: Future<Output = Result<String, E>>,
MarkSent: FnMut(i64, usize) -> MarkSentFut,
MarkSentFut: Future<Output = Result<bool, E>>,
MarkRetry: FnMut(i64, i32, i64, String) -> MarkRetryFut,
MarkRetryFut: Future<Output = Result<bool, E>>,
MarkFailed: FnMut(i64, i32, String) -> MarkFailedFut,
MarkFailedFut: Future<Output = Result<bool, E>>,
OnSent: FnMut(MailOutboxDispatchContext, i32, String) -> OnSentFut,
OnSentFut: Future<Output = ()>,
OnFailed: FnMut(MailOutboxDispatchContext, i32, String) -> OnFailedFut,
OnFailedFut: Future<Output = ()>,Expand description
Runs one mail outbox dispatch pass using product-provided persistence callbacks.
Forge owns the control flow and retry classification. Product crates own time calculation, repository calls, template rendering, mail auditing, and error types.