pub struct ImapClientStd {
pub stream: Box<dyn ImapStream>,
pub fragmentizer: Fragmentizer,
pub auto_id: Option<Vec<(IString<'static>, NString<'static>)>>,
}client only.Expand description
auto_id is consumed by every auth_*/login: None skips,
Some(empty) sends ID NIL, Some(params) sends ID (k v ...).
Required by a few providers (mail.qq.com, fastmail).
Fields§
§stream: Box<dyn ImapStream>§fragmentizer: Fragmentizer§auto_id: Option<Vec<(IString<'static>, NString<'static>)>>Implementations§
Source§impl ImapClientStd
impl ImapClientStd
Sourcepub fn new<S: Read + Write + Send + 'static>(stream: S) -> Self
pub fn new<S: Read + Write + Send + 'static>(stream: S) -> Self
Caller is responsible for opening the connection (TCP, TLS, STARTTLS).
Sourcepub fn set_stream<S: Read + Write + Send + 'static>(&mut self, stream: S)
pub fn set_stream<S: Read + Write + Send + 'static>(&mut self, stream: S)
Useful after a STARTTLS upgrade or on reconnection.
Sourcepub fn run<C, T, E>(&mut self, coroutine: C) -> Result<T, ImapClientStdError>
pub fn run<C, T, E>(&mut self, coroutine: C) -> Result<T, ImapClientStdError>
Drives a standard-shape coroutine to completion. Richer yields (IDLE events, watch deltas) need their own per-method loops.
Sourcepub fn greeting(
&mut self,
) -> Result<Vec<Capability<'static>>, ImapClientStdError>
pub fn greeting( &mut self, ) -> Result<Vec<Capability<'static>>, ImapClientStdError>
Consumes the greeting and returns the advertised capabilities (forcing a CAPABILITY round-trip if the greeting carried none).
Sourcepub fn login(
&mut self,
user: impl AsRef<str>,
password: impl AsRef<str>,
opts: ImapLoginOptions,
) -> Result<Vec<Capability<'static>>, ImapClientStdError>
pub fn login( &mut self, user: impl AsRef<str>, password: impl AsRef<str>, opts: ImapLoginOptions, ) -> Result<Vec<Capability<'static>>, ImapClientStdError>
LOGIN. Channel must be TLS-protected. Consumes auto_id.
Sourcepub fn starttls(&mut self) -> Result<Vec<u8>, ImapClientStdError>
pub fn starttls(&mut self) -> Result<Vec<u8>, ImapClientStdError>
STARTTLS. Caller still has to upgrade the socket and refresh
capabilities. Returns any bytes pre-read past the tagged
response (a non-empty return is a STARTTLS-injection signal:
refuse the upgrade).
Sourcepub fn auth_anonymous(
&mut self,
message: Option<impl AsRef<str>>,
opts: ImapAuthAnonymousOptions,
) -> Result<Vec<Capability<'static>>, ImapClientStdError>
pub fn auth_anonymous( &mut self, message: Option<impl AsRef<str>>, opts: ImapAuthAnonymousOptions, ) -> Result<Vec<Capability<'static>>, ImapClientStdError>
SASL AUTHENTICATE ANONYMOUS. Consumes auto_id.
Sourcepub fn auth_login(
&mut self,
user: impl AsRef<str>,
password: impl AsRef<str>,
opts: ImapAuthLoginOptions,
) -> Result<Vec<Capability<'static>>, ImapClientStdError>
pub fn auth_login( &mut self, user: impl AsRef<str>, password: impl AsRef<str>, opts: ImapAuthLoginOptions, ) -> Result<Vec<Capability<'static>>, ImapClientStdError>
SASL AUTHENTICATE LOGIN (legacy). Prefer auth_plain or
auth_scram_sha256 when supported. Consumes auto_id.
Sourcepub fn auth_plain(
&mut self,
authzid: Option<impl AsRef<str>>,
authcid: impl AsRef<str>,
password: impl AsRef<str>,
opts: ImapAuthPlainOptions,
) -> Result<Vec<Capability<'static>>, ImapClientStdError>
pub fn auth_plain( &mut self, authzid: Option<impl AsRef<str>>, authcid: impl AsRef<str>, password: impl AsRef<str>, opts: ImapAuthPlainOptions, ) -> Result<Vec<Capability<'static>>, ImapClientStdError>
SASL AUTHENTICATE PLAIN. Consumes auto_id.
Sourcepub fn auth_oauthbearer(
&mut self,
user: impl AsRef<str>,
host: impl AsRef<str>,
port: u16,
token: impl AsRef<str>,
opts: ImapAuthOauthbearerOptions,
) -> Result<Vec<Capability<'static>>, ImapClientStdError>
pub fn auth_oauthbearer( &mut self, user: impl AsRef<str>, host: impl AsRef<str>, port: u16, token: impl AsRef<str>, opts: ImapAuthOauthbearerOptions, ) -> Result<Vec<Capability<'static>>, ImapClientStdError>
SASL AUTHENTICATE OAUTHBEARER. Channel must be
TLS-protected. Consumes auto_id.
Sourcepub fn auth_xoauth2(
&mut self,
user: impl AsRef<str>,
token: impl AsRef<str>,
opts: ImapAuthXoauth2Options,
) -> Result<Vec<Capability<'static>>, ImapClientStdError>
pub fn auth_xoauth2( &mut self, user: impl AsRef<str>, token: impl AsRef<str>, opts: ImapAuthXoauth2Options, ) -> Result<Vec<Capability<'static>>, ImapClientStdError>
SASL AUTHENTICATE XOAUTH2 (Google’s pre-standard mechanism).
Prefer auth_oauthbearer when supported. Consumes auto_id.
Sourcepub fn auth_scram_sha256(
&mut self,
user: impl AsRef<str>,
password: impl AsRef<str>,
opts: ImapAuthScramSha256Options,
) -> Result<Vec<Capability<'static>>, ImapClientStdError>
Available on crate feature scram only.
pub fn auth_scram_sha256( &mut self, user: impl AsRef<str>, password: impl AsRef<str>, opts: ImapAuthScramSha256Options, ) -> Result<Vec<Capability<'static>>, ImapClientStdError>
scram only.SASL AUTHENTICATE SCRAM-SHA-256. Consumes auto_id.
pub fn logout(&mut self) -> Result<(), ImapClientStdError>
pub fn capability( &mut self, ) -> Result<Vec<Capability<'static>>, ImapClientStdError>
pub fn noop(&mut self) -> Result<(), ImapClientStdError>
Sourcepub fn id(
&mut self,
parameters: Option<Vec<(IString<'static>, NString<'static>)>>,
) -> Result<Option<Vec<(IString<'static>, NString<'static>)>>, ImapClientStdError>
pub fn id( &mut self, parameters: Option<Vec<(IString<'static>, NString<'static>)>>, ) -> Result<Option<Vec<(IString<'static>, NString<'static>)>>, ImapClientStdError>
ID. None sends ID NIL.
pub fn enable( &mut self, capabilities: Vec1<CapabilityEnable<'static>>, ) -> Result<Option<Vec<CapabilityEnable<'static>>>, ImapClientStdError>
pub fn list( &mut self, reference: Mailbox<'static>, pattern: ListMailbox<'static>, ) -> Result<ImapMailboxListing, ImapClientStdError>
pub fn lsub( &mut self, reference: Mailbox<'static>, pattern: ListMailbox<'static>, ) -> Result<ImapMailboxListing, ImapClientStdError>
pub fn status( &mut self, mailbox: Mailbox<'static>, item_names: impl Into<Cow<'static, [StatusDataItemName]>>, ) -> Result<Vec<StatusDataItem>, ImapClientStdError>
pub fn create( &mut self, mailbox: Mailbox<'static>, ) -> Result<(), ImapClientStdError>
pub fn delete( &mut self, mailbox: Mailbox<'static>, ) -> Result<(), ImapClientStdError>
pub fn rename( &mut self, from: Mailbox<'static>, to: Mailbox<'static>, ) -> Result<(), ImapClientStdError>
pub fn subscribe( &mut self, mailbox: Mailbox<'static>, ) -> Result<(), ImapClientStdError>
pub fn unsubscribe( &mut self, mailbox: Mailbox<'static>, ) -> Result<(), ImapClientStdError>
pub fn select( &mut self, mailbox: Mailbox<'static>, ) -> Result<SelectData, ImapClientStdError>
pub fn examine( &mut self, mailbox: Mailbox<'static>, ) -> Result<SelectData, ImapClientStdError>
Sourcepub fn select_qresync(
&mut self,
mailbox: Mailbox<'static>,
uid_validity: NonZeroU32,
highest_mod_seq: u64,
capability: &[Capability<'static>],
) -> Result<SelectData, ImapClientStdError>
pub fn select_qresync( &mut self, mailbox: Mailbox<'static>, uid_validity: NonZeroU32, highest_mod_seq: u64, capability: &[Capability<'static>], ) -> Result<SelectData, ImapClientStdError>
SELECT <mailbox> (QRESYNC ...). Errors with
QresyncNotSupported when capability lacks QRESYNC, with
InvalidModSeq when highest_mod_seq is 0.
pub fn close(&mut self) -> Result<(), ImapClientStdError>
pub fn unselect(&mut self) -> Result<(), ImapClientStdError>
pub fn check(&mut self) -> Result<(), ImapClientStdError>
Sourcepub fn expunge(&mut self) -> Result<Vec<NonZeroU32>, ImapClientStdError>
pub fn expunge(&mut self) -> Result<Vec<NonZeroU32>, ImapClientStdError>
EXPUNGE; returns the expunged sequence numbers.
Sourcepub fn watch_mailbox(
self,
mailbox: Mailbox<'static>,
capability: &[Capability<'static>],
) -> Result<ImapMailboxWatchStream, ImapClientStdError>
pub fn watch_mailbox( self, mailbox: Mailbox<'static>, capability: &[Capability<'static>], ) -> Result<ImapMailboxWatchStream, ImapClientStdError>
Consumes the client into a background watcher. Drop the
returned stream (or call its close) to wind down. Errors when
capability lacks QRESYNC.
pub fn fetch( &mut self, sequence_set: SequenceSet, items: MacroOrMessageDataItemNames<'static>, uid: bool, ) -> Result<BTreeMap<NonZeroU32, Vec1<MessageDataItem<'static>>>, ImapClientStdError>
pub fn search( &mut self, criteria: Vec1<SearchKey<'static>>, uid: bool, ) -> Result<Vec<NonZeroU32>, ImapClientStdError>
Sourcepub fn store(
&mut self,
sequence_set: SequenceSet,
kind: StoreType,
flags: Vec<Flag<'static>>,
uid: bool,
) -> Result<BTreeMap<NonZeroU32, Vec1<MessageDataItem<'static>>>, ImapClientStdError>
pub fn store( &mut self, sequence_set: SequenceSet, kind: StoreType, flags: Vec<Flag<'static>>, uid: bool, ) -> Result<BTreeMap<NonZeroU32, Vec1<MessageDataItem<'static>>>, ImapClientStdError>
STORE (echo variant); returns the server-reported FETCH echoes.
pub fn copy( &mut self, sequence_set: SequenceSet, mailbox: Mailbox<'static>, uid: bool, ) -> Result<ImapCopyUid, ImapClientStdError>
pub fn move( &mut self, sequence_set: SequenceSet, mailbox: Mailbox<'static>, uid: bool, ) -> Result<ImapCopyUid, ImapClientStdError>
Sourcepub fn append(
&mut self,
mailbox: Mailbox<'static>,
flags: Vec<Flag<'static>>,
date: Option<DateTime>,
message: LiteralOrLiteral8<'static>,
) -> Result<ImapAppendOutput, ImapClientStdError>
pub fn append( &mut self, mailbox: Mailbox<'static>, flags: Vec<Flag<'static>>, date: Option<DateTime>, message: LiteralOrLiteral8<'static>, ) -> Result<ImapAppendOutput, ImapClientStdError>
APPEND; returns the optional EXISTS count and APPENDUID pair.
pub fn sort( &mut self, sort_criteria: Vec1<SortCriterion>, search_criteria: Vec1<SearchKey<'static>>, uid: bool, ) -> Result<Vec<NonZeroU32>, ImapClientStdError>
pub fn thread( &mut self, algorithm: ThreadingAlgorithm<'static>, search_criteria: Vec1<SearchKey<'static>>, uid: bool, ) -> Result<Vec<Thread>, ImapClientStdError>
Source§impl ImapClientStd
impl ImapClientStd
Sourcepub fn connect(
url: &Url,
tls: &Tls,
starttls: bool,
sasl: Option<impl Into<Sasl>>,
auto_id: Option<Vec<(IString<'static>, NString<'static>)>>,
) -> Result<(Self, Vec<Capability<'static>>), ImapClientStdError>
Available on crate features native-tls or rustls-aws or rustls-ring only.
pub fn connect( url: &Url, tls: &Tls, starttls: bool, sasl: Option<impl Into<Sasl>>, auto_id: Option<Vec<(IString<'static>, NString<'static>)>>, ) -> Result<(Self, Vec<Capability<'static>>), ImapClientStdError>
native-tls or rustls-aws or rustls-ring only.End-to-end connect: TCP/TLS, optional STARTTLS, greeting,
optional SASL. imap:// is plain TCP (143), imaps:// is
implicit TLS (993). starttls = true is only valid on
imap://. Pass Sasl::None to skip auth.