[−][src]Struct imap::Client
An (unauthenticated) handle to talk to an IMAP server. This is what you get when first
connecting. A succesfull call to Client::login
or Client::authenticate
will return a
Session
instance that provides the usual IMAP methods.
Methods
impl Client<TcpStream>
[src]
pub fn secure<S: AsRef<str>>(
self,
domain: S,
ssl_connector: &TlsConnector
) -> Result<Client<TlsStream<TcpStream>>>
[src]
self,
domain: S,
ssl_connector: &TlsConnector
) -> Result<Client<TlsStream<TcpStream>>>
This will upgrade an IMAP client from using a regular TCP connection to use TLS.
The domain parameter is required to perform hostname verification.
impl<T: Read + Write> Client<T>
[src]
pub fn new(stream: T) -> Client<T>
[src]
Creates a new client over the given stream.
This method primarily exists for writing tests that mock the underlying transport, but can also be used to support IMAP over custom tunnels.
pub fn login<U: AsRef<str>, P: AsRef<str>>(
self,
username: U,
password: P
) -> Result<Session<T>, (Error, Client<T>)>
[src]
self,
username: U,
password: P
) -> Result<Session<T>, (Error, Client<T>)>
Log in to the IMAP server. Upon success a Session
instance is
returned; on error the original Client
instance is returned in addition to the error.
This is because login
takes ownership of self
, so in order to try again (e.g. after
prompting the user for credetials), ownership of the original Client
needs to be
transferred back to the caller.
let client = imap::connect( ("imap.example.org", 993), "imap.example.org", &tls_connector).unwrap(); match client.login("user", "pass") { Ok(s) => { // you are successfully authenticated! }, Err((e, orig_client)) => { eprintln!("error logging in: {}", e); // prompt user and try again with orig_client here return; } }
pub fn authenticate<A: Authenticator, S: AsRef<str>>(
self,
auth_type: S,
authenticator: &A
) -> Result<Session<T>, (Error, Client<T>)>
[src]
self,
auth_type: S,
authenticator: &A
) -> Result<Session<T>, (Error, Client<T>)>
Authenticate with the server using the given custom authenticator
to handle the server's
challenge.
extern crate imap; extern crate native_tls; use native_tls::TlsConnector; struct OAuth2 { user: String, access_token: String, } impl imap::Authenticator for OAuth2 { type Response = String; fn process(&self, _: &[u8]) -> Self::Response { format!( "user={}\x01auth=Bearer {}\x01\x01", self.user, self.access_token ) } } fn main() { let auth = OAuth2 { user: String::from("me@example.com"), access_token: String::from("<access_token>"), }; let domain = "imap.example.com"; let tls = TlsConnector::builder().build().unwrap(); let client = imap::connect((domain, 993), domain, &tls).unwrap(); match client.authenticate("XOAUTH2", &auth) { Ok(session) => { // you are successfully authenticated! }, Err((e, orig_client)) => { eprintln!("error authenticating: {}", e); // prompt user and try again with orig_client here return; } }; }
Trait Implementations
impl<T: Read + Write> DerefMut for Client<T>
[src]
impl<T: Debug + Read + Write> Debug for Client<T>
[src]
impl<T: Read + Write> Deref for Client<T>
[src]
Auto Trait Implementations
Blanket Implementations
impl<T, U> Into for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From for T
[src]
impl<T, U> TryFrom for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T> Borrow for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T, U> TryInto for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,