use mailgun_v3::email::async_impl::send_email;
use mailgun_v3::email::{Message, MessageBody};
use mailgun_v3::{Credentials, EmailAddress};
use crate::config::Config;
use crate::error::MailerError;
pub struct MailgunMailer {
api_key: String,
domain: String,
sender: String,
recipient: String,
}
impl MailgunMailer {
pub fn create(config: &Config) -> Self {
MailgunMailer {
api_key: config.mailgun_api_key.clone(),
domain: config.mailgun_domain.clone(),
sender: config.sender_email.clone(),
recipient: config.alert_email.clone(),
}
}
pub async fn send(&self, subject: &str, body: &str) -> Result<(), MailerError> {
let creds = Credentials::new(&self.api_key, &self.domain);
let recipient = EmailAddress::address(&self.recipient);
let sender = EmailAddress::address(&self.sender);
let body = MessageBody::Text(body.into());
let msg = Message {
to: vec![recipient],
subject: subject.into(),
body,
..Default::default()
};
match send_email(&creds, &sender, msg).await {
Ok(_) => Ok(()),
Err(_) => Err(MailerError::SendError),
}
}
}