52个版本 (13个稳定版)
3.0.0-alpha.14 | 2024年3月31日 |
---|---|
3.0.0-alpha.12 | 2023年10月7日 |
3.0.0-alpha.11 | 2023年8月13日 |
3.0.0-alpha.10 | 2023年1月22日 |
0.0.3 | 2015年6月15日 |
#4 in 邮件
10,300 每月下载量
用于 27 个crate(20个直接使用)
320KB
6.5K SLoC
imap
此crate允许您连接并交互实现IMAP协议(RFC 3501 及其各种扩展)的服务器。在服务器上进行认证后,IMAP允许您列出、获取和搜索电子邮件,以及监视邮箱的变化。它至少支持最新的三个稳定版Rust(可能甚至更早的版本;请查看 CI结果)。
此crate正在寻找维护者——如果您感兴趣,请联系 @jonhoo。
要连接,请使用 ClientBuilder
。这为您提供了一个未经认证的 Client
。然后,您可以使用 Client::login
或 Client::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 License,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT),任选其一。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交给工作内容的任何贡献都应像上面那样双许可,不附加任何额外条款或条件。
依赖项
~5–17MB
~243K SLoC