mod address;
mod attachment;
mod email;
mod error;
mod mailer;
mod transport;
#[cfg(feature = "handlebars")]
mod template_handlebars;
#[cfg(feature = "tera")]
mod template_tera;
#[cfg(feature = "minijinja")]
mod template_minijinja;
#[cfg(feature = "sendgrid")]
mod sendgrid;
#[cfg(feature = "ses")]
mod ses;
#[cfg(feature = "mailgun")]
mod mailgun;
#[cfg(feature = "queue")]
mod queue;
pub use address::{Address, IntoAddress, Mailbox};
pub use attachment::{Attachment, ContentDisposition};
pub use email::{Email, EmailBuilder};
pub use error::{MailError, Result};
pub use mailer::{Mailer, MailerConfig};
pub use transport::{SmtpConfig, SmtpSecurity, SmtpTransport, Transport};
#[cfg(feature = "handlebars")]
pub use template_handlebars::HandlebarsEngine;
#[cfg(feature = "tera")]
pub use template_tera::TeraEngine;
#[cfg(feature = "minijinja")]
pub use template_minijinja::MiniJinjaEngine;
#[cfg(feature = "sendgrid")]
pub use sendgrid::{SendGridConfig, SendGridTransport};
#[cfg(feature = "ses")]
pub use ses::{SesConfig, SesTransport};
#[cfg(feature = "mailgun")]
pub use mailgun::{MailgunConfig, MailgunTransport};
#[cfg(feature = "queue")]
pub use queue::{
EmailJob, EmailQueue, EmailQueueBackend, EmailQueueConfig, EmailQueueWorker, InMemoryBackend,
MailerQueueExt, QueueStats,
};
#[cfg(feature = "redis")]
pub use queue::RedisBackend;
pub trait TemplateEngine: Send + Sync {
fn render(&self, name: &str, context: &serde_json::Value) -> Result<RenderedTemplate>;
fn has_template(&self, name: &str) -> bool;
fn register_template(&mut self, name: &str, content: &str) -> Result<()>;
}
#[derive(Debug, Clone)]
pub struct RenderedTemplate {
pub html: Option<String>,
pub text: Option<String>,
pub subject: Option<String>,
}
impl RenderedTemplate {
pub fn html(html: impl Into<String>) -> Self {
Self {
html: Some(html.into()),
text: None,
subject: None,
}
}
pub fn text(text: impl Into<String>) -> Self {
Self {
html: None,
text: Some(text.into()),
subject: None,
}
}
pub fn both(html: impl Into<String>, text: impl Into<String>) -> Self {
Self {
html: Some(html.into()),
text: Some(text.into()),
subject: None,
}
}
pub fn with_subject(mut self, subject: impl Into<String>) -> Self {
self.subject = Some(subject.into());
self
}
}
pub mod prelude {
pub use crate::address::{Address, IntoAddress, Mailbox};
pub use crate::attachment::{Attachment, ContentDisposition};
pub use crate::email::{Email, EmailBuilder};
pub use crate::error::{MailError, Result};
pub use crate::mailer::{Mailer, MailerConfig};
pub use crate::transport::{SmtpConfig, SmtpSecurity, SmtpTransport, Transport};
pub use crate::{RenderedTemplate, TemplateEngine};
#[cfg(feature = "handlebars")]
pub use crate::HandlebarsEngine;
#[cfg(feature = "sendgrid")]
pub use crate::sendgrid::{SendGridConfig, SendGridTransport};
#[cfg(feature = "ses")]
pub use crate::ses::{SesConfig, SesTransport};
#[cfg(feature = "mailgun")]
pub use crate::mailgun::{MailgunConfig, MailgunTransport};
#[cfg(feature = "queue")]
pub use crate::queue::{EmailJob, EmailQueue, EmailQueueBackend, EmailQueueConfig};
}