|
|
|
@ -1,8 +1,9 @@
|
|
|
|
|
use lettre::smtp::authentication::Credentials;
|
|
|
|
|
use lettre::smtp::ConnectionReuseParameters;
|
|
|
|
|
use lettre::{ClientSecurity, ClientTlsParameters, SmtpClient, SmtpTransport, Transport};
|
|
|
|
|
use lettre_email::EmailBuilder;
|
|
|
|
|
use lettre_email::{EmailBuilder,PartBuilder,MimeMultipartType};
|
|
|
|
|
use native_tls::{Protocol, TlsConnector};
|
|
|
|
|
use quoted_printable::encode_to_str;
|
|
|
|
|
|
|
|
|
|
use crate::api::EmptyResult;
|
|
|
|
|
use crate::auth::{encode_jwt, generate_invite_claims};
|
|
|
|
@ -135,11 +136,28 @@ pub fn send_invite_confirmed(address: &str, org_name: &str) -> EmptyResult {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn send_email(address: &str, subject: &str, body_html: &str, body_text: &str) -> EmptyResult {
|
|
|
|
|
let html = PartBuilder::new()
|
|
|
|
|
.body(encode_to_str(body_html))
|
|
|
|
|
.header(("Content-Type", "text/html; charset=utf-8"))
|
|
|
|
|
.header(("Content-Transfer-Encoding", "quoted-printable"))
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
let text = PartBuilder::new()
|
|
|
|
|
.body(encode_to_str(body_text))
|
|
|
|
|
.header(("Content-Type", "text/plain; charset=utf-8"))
|
|
|
|
|
.header(("Content-Transfer-Encoding", "quoted-printable"))
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
let alternative = PartBuilder::new()
|
|
|
|
|
.message_type(MimeMultipartType::Alternative)
|
|
|
|
|
.child(text)
|
|
|
|
|
.child(html);
|
|
|
|
|
|
|
|
|
|
let email = EmailBuilder::new()
|
|
|
|
|
.to(address)
|
|
|
|
|
.from((CONFIG.smtp_from().as_str(), CONFIG.smtp_from_name().as_str()))
|
|
|
|
|
.subject(subject)
|
|
|
|
|
.alternative(body_html, body_text)
|
|
|
|
|
.child(alternative.build())
|
|
|
|
|
.build()
|
|
|
|
|
.map_err(|e| Error::new("Error building email", e.to_string()))?;
|
|
|
|
|
|
|
|
|
|