bios_iam/basic/serv/clients/
mail_client.rs1use 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 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 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}