forge_backup 1.2.0

A program to backup all the user home folders to an S3 bucket.
Documentation
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),
        }
    }
}