1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
//! maik is a mock SMTP server library.
//! It is designed to help write integration tests for applications that send emails.
//!
//! # Examples
//!
//! Basic example with authentication and TLS,
//! using the [lettre](https://docs.rs/lettre/latest/lettre/) client.
//!
//! ```no_run
//! use lettre::{
//! message::Mailboxes,
//! transport::smtp::{
//! authentication::{Credentials, Mechanism},
//! client::{Certificate, Tls, TlsParameters, TlsParametersBuilder},
//! SmtpTransport,
//! },
//! Message, Transport,
//! };
//! use maik::{MailAssertion, MockServer};
//!
//! #[test]
//! fn send_with_auth_and_tls() {
//! // set up and start the mock server
//! let server = MockServer::builder()
//! .add_mailbox("user@domain.tld", "my_password")
//! .build();
//!
//! server.start();
//!
//! // set up the client using lettre
//! let certificate = Certificate::from_pem(server.cert_pem()).unwrap();
//! let tls_params = TlsParametersBuilder::new(server.host().to_string())
//! .add_root_certificate(certificate)
//! .build()
//! .unwrap();
//! let credentials =
//! Credentials::new(String::from("user@domain.tld"), String::from("my_password"));
//! let mailer = SmtpTransport::relay(&server.host().to_string())
//! .unwrap()
//! .port(server.port())
//! .tls(Tls::Opportunistic(tls_params))
//! .credentials(credentials)
//! .authentication(vec![Mechanism::Plain])
//! .build();
//!
//! // send a mail message
//! let message = Message::builder()
//! .from("user@domain.tld".parse().unwrap())
//! .to("danger@domain.tld".parse().unwrap())
//! .body(String::from("What's up?"))
//! .unwrap();
//! mailer.send(&message);
//!
//! // assert user@domain.tld sent "What's up?" to danger@domain.tld
//! let ma = MailAssertion::new()
//! .sender_is("user@domain.tld")
//! .recipients_are(["danger@domain.tld"])
//! .body_is("What's up?");
//! assert!(server.assert(ma));
//! }
//! ```
//!
//! Another example using the [lettre](https://docs.rs/lettre/latest/lettre/) client,
//! without tls and verification of authentication credentials.
//!
//! ```no_run
//! use lettre::{
//! message::Mailboxes,
//! transport::smtp::{
//! authentication::{Credentials, Mechanism},
//! client::{Certificate, Tls},
//! SmtpTransport,
//! },
//! Message, Transport,
//! };
//! use maik::{MailAssertion, MockServer};
//! use regex::bytes::Regex;
//!
//! #[test]
//! fn no_verify_credentials_no_tls() {
//! // set up and start the mock server
//! let server = MockServer::builder()
//! .no_verify_credentials()
//! .build();
//!
//! server.start();
//!
//! // set up the client using lettre
//! let credentials = Credentials::new(
//! String::from("no-reply@domain.tld"),
//! String::from("any_password"),
//! );
//! let mailer = SmtpTransport::relay(&server.host().to_string())
//! .unwrap()
//! .port(server.port())
//! .tls(Tls::None)
//! .credentials(credentials)
//! .authentication(vec![Mechanism::Plain])
//! .build();
//!
//! // send a mail message
//! let message = Message::builder()
//! .from("no-reply@domain.tld".parse().unwrap())
//! .to("user@domain.tld".parse().unwrap())
//! .body(String::from("Here is your verification code: 123456"))
//! .unwrap();
//! mailer.send(&message);
//!
//! // assert user@domain.tld received some mail that ends with "verification code: \d{6}"
//! let ma = MailAssertion::new()
//! .recipients_are(["user@domain.tld"])
//! .body_matches(Regex::new(r"verification code: \d{6}$").unwrap());
//! assert!(server.assert(ma));
//! }
//! ```
pub use MailAssertion;
pub use ;