#imap #客户端 #邮箱 #服务器 #连接 #会话

imap-patch-for-async-imap-lite

IMAP 客户端,适用于 Rust

1 个稳定版本

2.2.0 2020年7月30日

#153 in 电子邮件


用于 async-imap-lite

Apache-2.0/MIT

165KB
3K SLoC

imap

Crates.io Documentation Crate License Build Status Cirrus CI Build Status Codecov Dependency status

此 crate 允许您连接并交互使用实现 IMAP 协议(RFC 3501 和各种扩展)的服务器。在服务器上经过身份验证后,IMAP 允许您列出、检索和搜索电子邮件,以及监控邮箱的变化。它至少支持最新的三个稳定 Rust 版本(可能甚至更老;请参阅 CI 结果)。

要连接,请使用 connect 函数。这将为您提供一个未经身份验证的 Client。然后您可以使用 Client::loginClient::authenticate 来执行用户名/密码或挑战/响应身份验证。这又为您提供了一个经过身份验证的 Session,允许您访问服务器上的邮箱。

该 crate 中的文档大量借鉴了各种 RFC,但不应被视为完整的参考。如果任何内容不清楚,请参阅文档中嵌入的各种类型和方法的 RFC 链接,并阅读那里的原始文本!

以下是一个基本的客户端示例。有关更多信息,请参阅 examples/ 目录。

extern crate imap;
extern crate native_tls;

fn fetch_inbox_top() -> imap::error::Result<Option<String>> {
    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("[email protected]", "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))
}

运行测试套件

要运行集成测试,您需要运行 GreenMail。最简单的方法是使用 Docker

$ docker pull greenmail/standalone:1.5.9
$ docker run -t -i -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.9

许可证

许可协议为以下之一

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,将按照上述方式双授权,不附加任何额外条款或条件。

依赖项

~4–15MB
~186K SLoC