use rustlavel::prelude::*;
use rustlavel::mail::{Mailer, Message};
use crate::support::settings::Settings;
pub async fn send(req: &Request, message: Message) -> Result<()> {
let Some(mailer) = req.state::<Mailer>() else {
warn!("no mailer is configured; a message to {} was not sent", message.envelope_recipients().join(", "));
return Ok(());
};
mailer.send(with_from(req, message).await).await
}
pub async fn with_from(req: &Request, message: Message) -> Message {
if message.sender().is_some() {
return message;
}
let (address, name) = from_address(req).await;
if address.is_empty() {
return message;
}
match name.is_empty() {
true => message.from(address.as_str()),
false => message.from((name.as_str(), address.as_str())),
}
}
pub async fn from_address(req: &Request) -> (String, String) {
match req.state::<Settings>() {
Some(settings) => (
settings.get("mail.from.address").await,
settings.get("mail.from.name").await,
),
None => (
req.config().string("mail.from.address", ""),
req.config().string("mail.from.name", ""),
),
}
}