/// PATCH_FOR_ASYNC_IMAP_LITE [edit] extern crate imap_patch_for_async_imap_lite as imap; extern crate native_tls; fn main() { // To connect to the gmail IMAP server with this you will need to allow unsecure apps access. // See: https://support.google.com/accounts/answer/6010255?hl=en // Look at the gmail_oauth2.rs example on how to connect to a gmail server securely. fetch_inbox_top().unwrap(); } fn fetch_inbox_top() -> imap::error::Result> { let domain = "imap.example.com"; let tls = native_tls::TlsConnector::builder().build().unwrap(); // we pass in the domain twice to check that the server's TLS // certificate is valid for the domain we're connecting to. let client = imap::connect((domain, 993), domain, &tls).unwrap(); // the client we have here is unauthenticated. // to do anything useful with the e-mails, we need to log in let mut imap_session = client .login("me@example.com", "password") .map_err(|e| e.0)?; // we want to fetch the first email in the INBOX mailbox imap_session.select("INBOX")?; // fetch message number 1 in this mailbox, along with its RFC822 field. // RFC 822 dictates the format of the body of e-mails let messages = imap_session.fetch("1", "RFC822")?; let message = if let Some(m) = messages.iter().next() { m } else { return Ok(None); }; // extract the message's body let body = message.body().expect("message did not have a body!"); let body = std::str::from_utf8(body) .expect("message was not valid utf-8") .to_string(); // be nice to the server and log out imap_session.logout()?; Ok(Some(body)) }