mirror of
				https://github.com/dani-garcia/vaultwarden.git
				synced 2025-10-31 22:01:15 +00:00 
			
		
		
		
	Merge branch 'lettre-improvements' of https://github.com/paolobarbolini/vaultwarden into paolobarbolini-lettre-improvements
This commit is contained in:
		
				commit
				
					
						6b6f5b8d04
					
				
			
		
					 3 changed files with 3 additions and 29 deletions
				
			
		
							
								
								
									
										1
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							|  | @ -3670,7 +3670,6 @@ dependencies = [ | |||
|  "governor", | ||||
|  "handlebars", | ||||
|  "html5gum", | ||||
|  "idna 0.2.3", | ||||
|  "job_scheduler", | ||||
|  "jsonwebtoken", | ||||
|  "lettre", | ||||
|  |  | |||
|  | @ -108,7 +108,6 @@ webauthn-rs = "0.3.2" | |||
| url = "2.2.2" | ||||
| 
 | ||||
| # Email libraries | ||||
| idna = "0.2.3" # Punycode conversion | ||||
| lettre = { version = "0.10.0-rc.7", features = ["smtp-transport", "builder", "serde", "native-tls", "hostname", "tracing"], default-features = false } | ||||
| percent-encoding = "2.1.0" # URL encoding library used for URL's in the emails | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										30
									
								
								src/mail.rs
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								src/mail.rs
									
										
									
									
									
								
							|  | @ -4,7 +4,7 @@ use chrono::NaiveDateTime; | |||
| use percent_encoding::{percent_encode, NON_ALPHANUMERIC}; | ||||
| 
 | ||||
| use lettre::{ | ||||
|     message::{header, Mailbox, Message, MultiPart, SinglePart}, | ||||
|     message::{Mailbox, Message, MultiPart}, | ||||
|     transport::smtp::authentication::{Credentials, Mechanism as SmtpAuthMechanism}, | ||||
|     transport::smtp::client::{Tls, TlsParameters}, | ||||
|     transport::smtp::extension::ClientId, | ||||
|  | @ -467,37 +467,13 @@ pub fn send_test(address: &str) -> EmptyResult { | |||
| } | ||||
| 
 | ||||
| fn send_email(address: &str, subject: &str, body_html: String, body_text: String) -> EmptyResult { | ||||
|     let address_split: Vec<&str> = address.rsplitn(2, '@').collect(); | ||||
|     if address_split.len() != 2 { | ||||
|         err!("Invalid email address (no @)"); | ||||
|     } | ||||
| 
 | ||||
|     let domain_puny = match idna::domain_to_ascii_strict(address_split[0]) { | ||||
|         Ok(d) => d, | ||||
|         Err(_) => err!("Can't convert email domain to ASCII representation"), | ||||
|     }; | ||||
| 
 | ||||
|     let address = format!("{}@{}", address_split[1], domain_puny); | ||||
| 
 | ||||
|     let html = SinglePart::builder() | ||||
|         // We force Base64 encoding because in the past we had issues with different encodings.
 | ||||
|         .header(header::ContentTransferEncoding::Base64) | ||||
|         .header(header::ContentType::TEXT_HTML) | ||||
|         .body(body_html); | ||||
| 
 | ||||
|     let text = SinglePart::builder() | ||||
|         // We force Base64 encoding because in the past we had issues with different encodings.
 | ||||
|         .header(header::ContentTransferEncoding::Base64) | ||||
|         .header(header::ContentType::TEXT_PLAIN) | ||||
|         .body(body_text); | ||||
| 
 | ||||
|     let smtp_from = &CONFIG.smtp_from(); | ||||
|     let email = Message::builder() | ||||
|         .message_id(Some(format!("<{}@{}>", crate::util::get_uuid(), smtp_from.split('@').collect::<Vec<&str>>()[1]))) | ||||
|         .to(Mailbox::new(None, Address::from_str(&address)?)) | ||||
|         .to(Mailbox::new(None, Address::from_str(address)?)) | ||||
|         .from(Mailbox::new(Some(CONFIG.smtp_from_name()), Address::from_str(smtp_from)?)) | ||||
|         .subject(subject) | ||||
|         .multipart(MultiPart::alternative().singlepart(text).singlepart(html))?; | ||||
|         .multipart(MultiPart::alternative_plain_html(body_text, body_html))?; | ||||
| 
 | ||||
|     match mailer().send(&email) { | ||||
|         Ok(_) => Ok(()), | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue