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