1 #[cfg(all(test, feature = "smtp-transport", feature = "pool"))] 2 mod sync { 3 use lettre::{address::Envelope, SmtpTransport, Transport}; 4 use std::{sync::mpsc, thread}; 5 envelope() -> Envelope6 fn envelope() -> Envelope { 7 Envelope::new( 8 Some("user@localhost".parse().unwrap()), 9 vec!["root@localhost".parse().unwrap()], 10 ) 11 .unwrap() 12 } 13 14 #[test] send_one()15 fn send_one() { 16 let mailer = SmtpTransport::builder_dangerous("127.0.0.1") 17 .port(2525) 18 .build(); 19 20 let result = mailer.send_raw(&envelope(), b"test"); 21 assert!(result.is_ok()); 22 } 23 24 #[test] send_from_thread()25 fn send_from_thread() { 26 let mailer = SmtpTransport::builder_dangerous("127.0.0.1") 27 .port(2525) 28 .build(); 29 30 let (s1, r1) = mpsc::channel(); 31 let (s2, r2) = mpsc::channel(); 32 33 let mailer1 = mailer.clone(); 34 let t1 = thread::spawn(move || { 35 s1.send(()).unwrap(); 36 r2.recv().unwrap(); 37 mailer1 38 .send_raw(&envelope(), b"test1") 39 .expect("Send failed from thread 1"); 40 }); 41 42 let mailer2 = mailer.clone(); 43 let t2 = thread::spawn(move || { 44 s2.send(()).unwrap(); 45 r1.recv().unwrap(); 46 mailer2 47 .send_raw(&envelope(), b"test2") 48 .expect("Send failed from thread 2"); 49 }); 50 51 t1.join().unwrap(); 52 t2.join().unwrap(); 53 54 mailer 55 .send_raw(&envelope(), b"test") 56 .expect("Send failed from main thread"); 57 } 58 } 59