pub mod consumer; pub mod error; pub mod events; pub mod publisher; pub mod transport; pub use consumer::EmailConsumer; pub use error::EmailError; pub use events::{ Attachment, BatchRecipient, EmailAddress, EmailFailed, EmailSent, RenderAndSendEmailRequest, SendBatchEmailRequest, SendEmailRequest, }; pub use publisher::MailPublisher; pub use transport::{EmailTransport, EmailTransportBuilder, build_message}; pub async fn send_optional( publisher: Option<&MailPublisher>, to: &str, subject: &str, text: &str, html: &str, request_id: Option<&str>, ) -> Result<(), EmailError> { let Some(publisher) = publisher else { tracing::warn!(to, "mail publisher disabled; skipping email"); return Ok(()); }; publisher .send_mail(to, subject, text, html, request_id) .await }