Module search_query

Source
Expand description

§Search emails query

This module exposes SearchEmailsQuery, a structure that helps you to filter and sort emails. A search emails query is composed of a filter query and a sort query.

It is actually used by ListEnvelopesOptions to filter and sort envelopes.

The search emails query can be parsed from a string via FromStr, see the parser module for more details.

use std::sync::Arc;

use chrono::NaiveDate;
use email::{
    account::config::{passwd::PasswordConfig, AccountConfig},
    backend::BackendBuilder,
    envelope::list::{ListEnvelopes, ListEnvelopesOptions},
    imap::{
        config::{ImapAuthConfig, ImapConfig},
        ImapContextBuilder,
    },
    search_query::{
        filter::SearchEmailsFilterQuery,
        sort::{SearchEmailsSorter, SearchEmailsSorterKind, SearchEmailsSorterOrder},
        SearchEmailsQuery,
    },
    tls::Encryption,
};
use email_testing_server::with_email_testing_server;
use secret::Secret;

#[tokio::main]
pub async fn main() {
    with_email_testing_server(|ports| async move {
        let account_config = Arc::new(AccountConfig::default());

        let imap_config = Arc::new(ImapConfig {
            host: "localhost".into(),
            port: ports.imap,
            encryption: Some(Encryption::None),
            login: "alice".into(),
            auth: ImapAuthConfig::Password(PasswordConfig(Secret::new_raw("password"))),
            ..Default::default()
        });
        let imap_ctx = ImapContextBuilder::new(account_config.clone(), imap_config.clone());
        let imap = BackendBuilder::new(account_config, imap_ctx)
            .build()
            .await
            .unwrap();

        let query = SearchEmailsQuery {
            filter: Some(SearchEmailsFilterQuery::And(
                Box::new(SearchEmailsFilterQuery::Subject(String::from("foo"))),
                Box::new(SearchEmailsFilterQuery::AfterDate(
                    NaiveDate::from_ymd_opt(2024, 1, 1).unwrap(),
                )),
            )),
            sort: Some(vec![
                SearchEmailsSorter::new(
                    SearchEmailsSorterKind::Date,
                    SearchEmailsSorterOrder::Descending,
                ),
                SearchEmailsSorter::new(
                    SearchEmailsSorterKind::Subject,
                    SearchEmailsSorterOrder::Ascending,
                ),
            ]),
        };

        let envelopes = imap
            .list_envelopes(
                "INBOX",
                ListEnvelopesOptions {
                    page: 1,
                    page_size: 10,
                    query: Some(query),
                },
            )
            .await
            .unwrap();

        assert_eq!(envelopes.len(), 0)
    })
    .await
}

Modules§

error
filter
Search emails filter query
parser
Search emails query string parser
sort
Search emails sort query

Structs§

SearchEmailsQuery
The search emails query structure.