52个版本 (13个稳定版)

3.0.0-alpha.142024年3月31日
3.0.0-alpha.122023年10月7日
3.0.0-alpha.112023年8月13日
3.0.0-alpha.102023年1月22日
0.0.3 2015年6月15日

#4 in 邮件

Download history 2947/week @ 2024-04-22 2420/week @ 2024-04-29 2310/week @ 2024-05-06 2893/week @ 2024-05-13 2798/week @ 2024-05-20 2451/week @ 2024-05-27 2493/week @ 2024-06-03 2853/week @ 2024-06-10 2959/week @ 2024-06-17 2537/week @ 2024-06-24 2813/week @ 2024-07-01 3060/week @ 2024-07-08 2723/week @ 2024-07-15 3232/week @ 2024-07-22 2137/week @ 2024-07-29 2077/week @ 2024-08-05

10,300 每月下载量
用于 27 个crate(20个直接使用)

Apache-2.0 OR MIT

320KB
6.5K SLoC

imap

Crates.io Documentation Crate License Codecov Dependency status

此crate允许您连接并交互实现IMAP协议(RFC 3501 及其各种扩展)的服务器。在服务器上进行认证后,IMAP允许您列出、获取和搜索电子邮件,以及监视邮箱的变化。它至少支持最新的三个稳定版Rust(可能甚至更早的版本;请查看 CI结果)。

此crate正在寻找维护者——如果您感兴趣,请联系 @jonhoo

要连接,请使用 ClientBuilder。这为您提供了一个未经认证的 Client。然后,您可以使用 Client::loginClient::authenticate 进行用户名/密码或挑战/响应认证。这会为您提供经过认证的 Session,它允许您访问服务器上的邮箱。

此crate中的文档大量借鉴了各种RFC,但不应该被视为完整的参考。如果有什么不清楚的地方,请根据文档中各种类型和方法的链接查看嵌入的RFC,并阅读那里的原始文本!

下面是一个基本的客户端示例。请查看 examples/ 目录以获取更多信息。

fn fetch_inbox_top() -> imap::error::Result<Option<String>> {

    let client = imap::ClientBuilder::new("imap.example.com", 993).connect()?;

    // 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))
}

弃用 native_tls

在遇到使用openssl存在问题的情况时,您可以禁用默认功能,该功能提供与native_tls仓库的集成。您可能想这样做的一个主要原因是交叉编译。要禁用native_tls,请将以下内容添加到您的Cargo.toml文件中

[dependencies.imap]
version = "<some version>"
default-features = false

即使没有native_tls,您也可以通过利用纯Rust的rustls仓库来使用TLS,该仓库通过rustls-tls特性启用。请参阅example/rustls.rs文件以获取示例。

运行测试套件

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

$ docker pull greenmail/standalone:1.6.15
$ docker run -it --rm -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.6.15

另一种选择是对cyrus imapd进行测试,它是一个更完整的IMAP实现,支持配额和ACLs,而greenmail则不支持。

$ docker pull outoforder/cyrus-imapd-tester
$ docker run -it --rm -p 3025:25 -p 3110:110 -p 3143:143 -p 3465:465 -p 3993:993 outoforder/cyrus-imapd-tester:latest

许可证

根据以下之一进行许可

贡献

除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交给工作内容的任何贡献都应像上面那样双许可,不附加任何额外条款或条件。

依赖项

~5–17MB
~243K SLoC