Merge pull request #248 from 641i130/main
Addresses #247 - Plaintext IMAP Connection Example
This commit is contained in:
commit
6d088bed4a
2 changed files with 51 additions and 0 deletions
|
|
@ -10,3 +10,4 @@ Examples:
|
||||||
* rustls - This demonstrates how to use Rustls instead of Openssl for secure connections (helpful for cross compilation).
|
* rustls - This demonstrates how to use Rustls instead of Openssl for secure connections (helpful for cross compilation).
|
||||||
* starttls - This is an example showing how to use STARTTLS after connecting over plaintext.
|
* starttls - This is an example showing how to use STARTTLS after connecting over plaintext.
|
||||||
* timeout - This demonstrates how to use timeouts while connecting to an IMAP server by using a custom TCP/TLS stream initialization and creating a `Client` directly instead of using the `ClientBuilder`.
|
* timeout - This demonstrates how to use timeouts while connecting to an IMAP server by using a custom TCP/TLS stream initialization and creating a `Client` directly instead of using the `ClientBuilder`.
|
||||||
|
* plaintext - This demonstrates how to make an unencrypted IMAP connection (usually over 143) with a `Client` using a naked TCP connection.
|
||||||
|
|
|
||||||
50
examples/plaintext.rs
Normal file
50
examples/plaintext.rs
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
use std::net::TcpStream;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// REMINDER this is dangerous, the credentials are sent over the connection in CLEARTEXT!
|
||||||
|
// Anyone or anything between this connection and the server can read your login creds!
|
||||||
|
// Please oh please do not use this where this is even a possibility.
|
||||||
|
match plaintext() {
|
||||||
|
Ok(conn) => {
|
||||||
|
eprintln!("Connection successful!");
|
||||||
|
println!("{:?}", conn);
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("Connection error!");
|
||||||
|
eprintln!("{:?}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn plaintext() -> imap::error::Result<Option<String>> {
|
||||||
|
let stream = TcpStream::connect("imap.example.com:143").unwrap();
|
||||||
|
let mut client = imap::Client::new(stream);
|
||||||
|
client.read_greeting()?;
|
||||||
|
eprintln!("\nUNENCRYPTED connection made!!!!\n");
|
||||||
|
eprintln!("This is highly not recommended.\n");
|
||||||
|
// to do anything useful with the e-mails, we need to log in
|
||||||
|
// keep in mind that this is over plain TCP, so may leak all your secrets!
|
||||||
|
let mut imap_session = client.login("user", "pass").unwrap();
|
||||||
|
|
||||||
|
// 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()
|
||||||
|
.map(|body| String::from_utf8(body.to_vec()).expect("message was not valid utf-8"))
|
||||||
|
.unwrap_or_else(String::new);
|
||||||
|
|
||||||
|
// be nice to the server and log out
|
||||||
|
imap_session.logout()?;
|
||||||
|
Ok(Some(body))
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue