bios_iam/basic/serv/clients/
mail_client.rs

1use tardis::basic::dto::TardisContext;
2use tardis::basic::result::TardisResult;
3use tardis::mail::mail_client::{TardisMailClient, TardisMailSendReq};
4use tardis::{tokio, TardisFunsInst};
5
6use crate::iam_config::IamConfig;
7use crate::iam_constants;
8
9pub struct MailClient;
10
11impl MailClient {
12    //TODO remove?
13    pub async fn async_send_cert_activate_vcode(mail: &str, account_name: Option<String>, vcode: &str, _funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<()> {
14        let mail_clone = mail.to_string();
15        let vcode_clone = vcode.to_string();
16        ctx.add_async_task(Box::new(|| {
17            Box::pin(async move {
18                let task_handle = tokio::spawn(async move {
19                    let funs = iam_constants::get_tardis_inst();
20                    let _ = MailClient::send_cert_activate_vcode(&mail_clone, account_name, &vcode_clone, &funs).await;
21                });
22                task_handle.await.unwrap();
23                Ok(())
24            })
25        }))
26        .await
27    }
28
29    pub async fn send_cert_activate_vcode(mail: &str, account_name: Option<String>, vcode: &str, funs: &TardisFunsInst) -> TardisResult<()> {
30        let mut subject = funs.conf::<IamConfig>().mail_template_cert_activate_title.clone();
31        let mut content = funs.conf::<IamConfig>().mail_template_cert_activate_content.clone();
32        if let Some(account_name) = account_name {
33            subject = subject.replace("{account_name}", &account_name);
34            content = content.replace("{account_name}", &account_name);
35        }
36        subject = subject.replace("{vcode}", vcode);
37        content = content.replace("{vcode}", vcode);
38        Self::send_mail(mail, subject, content, funs).await
39    }
40
41    //TODO remove?
42    pub async fn async_send_vcode(mail: &str, account_name: Option<String>, vcode: &str, _funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<()> {
43        let mail_clone = mail.to_string();
44        let vcode_clone = vcode.to_string();
45        ctx.add_async_task(Box::new(|| {
46            Box::pin(async move {
47                let task_handle = tokio::spawn(async move {
48                    let funs = iam_constants::get_tardis_inst();
49                    let _ = MailClient::send_vcode(&mail_clone, account_name, &vcode_clone, &funs).await;
50                });
51                task_handle.await.unwrap();
52                Ok(())
53            })
54        }))
55        .await
56    }
57
58    pub async fn send_vcode(mail: &str, account_name: Option<String>, vcode: &str, funs: &TardisFunsInst) -> TardisResult<()> {
59        let mut subject = funs.conf::<IamConfig>().mail_template_cert_login_title.clone();
60        let mut content = funs.conf::<IamConfig>().mail_template_cert_login_content.clone();
61        if let Some(account_name) = account_name {
62            subject = subject.replace("{account_name}", &account_name);
63            content = content.replace("{account_name}", &account_name);
64        }
65        subject = subject.replace("{vcode}", vcode);
66        content = content.replace("{vcode}", vcode);
67        Self::send_mail(mail, subject, content, funs).await
68    }
69
70    pub async fn async_send_pwd(mail: &str, pwd: &str, _funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<()> {
71        let mail_clone = mail.to_string();
72        let pwd_clone = pwd.to_string();
73        ctx.add_async_task(Box::new(|| {
74            Box::pin(async move {
75                let task_handle = tokio::spawn(async move {
76                    let funs = iam_constants::get_tardis_inst();
77                    let _ = MailClient::send_pwd(&mail_clone, &pwd_clone, &funs).await;
78                });
79                task_handle.await.unwrap();
80                Ok(())
81            })
82        }))
83        .await?;
84        Ok(())
85    }
86
87    pub async fn send_pwd(mail: &str, pwd: &str, funs: &TardisFunsInst) -> TardisResult<()> {
88        let mut subject = funs.conf::<IamConfig>().mail_template_cert_random_pwd_title.clone();
89        let mut content = funs.conf::<IamConfig>().mail_template_cert_random_pwd_content.clone();
90        subject = subject.replace("{pwd}", pwd);
91        content = content.replace("{pwd}", pwd);
92        Self::send_mail(mail, subject, content, funs).await
93    }
94
95    pub async fn send_mail(mail: &str, subject: String, content: String, funs: &TardisFunsInst) -> TardisResult<()> {
96        TardisMailClient::send_quiet(
97            funs.module_code().to_string(),
98            TardisMailSendReq {
99                subject,
100                txt_body: content,
101                html_body: None,
102                to: vec![mail.to_string()],
103                reply_to: vec![],
104                cc: vec![],
105                bcc: vec![],
106                from: None,
107            },
108        )
109    }
110}