diff --git a/src/mail.rs b/src/mail.rs index 8a64c24b..2c620066 100644 --- a/src/mail.rs +++ b/src/mail.rs @@ -5,6 +5,7 @@ use lettre::smtp::authentication::Credentials; use lettre_email::EmailBuilder; use crate::MailConfig; +use crate::CONFIG; fn mailer(config: &MailConfig) -> SmtpTransport { let client_security = if config.smtp_ssl { @@ -60,3 +61,31 @@ pub fn send_password_hint(address: &str, hint: Option, config: &MailConf .map_err(|e| e.to_string()) .and(Ok(())) } + +pub fn send_invite(address: &str, org_id: &str, org_user_id: &str, token: &str, org_name: &str, config: &MailConfig) -> Result<(), String> { + let (subject, body) = { + (format!("Join {}", &org_name), + format!( + " +

You have been invited to join the {} organization.

+ Click here to join

+

If you do not wish to join this organization, you can safely ignore this email.

+ ", + org_name, CONFIG.domain, org_id, org_user_id, token + )) + }; + + let email = EmailBuilder::new() + .to(address) + .from((config.smtp_from.clone(), "Bitwarden-rs")) + .subject(subject) + .header(("Content-Type", "text/html")) + .body(body) + .build() + .map_err(|e| e.to_string())?; + + mailer(config) + .send(email.into()) + .map_err(|e| e.to_string()) + .and(Ok(())) +} \ No newline at end of file