1 个稳定版本
2.2.0 | 2020年7月30日 |
---|
#153 in 电子邮件
165KB
3K SLoC
imap
此 crate 允许您连接并交互使用实现 IMAP 协议(RFC 3501 和各种扩展)的服务器。在服务器上经过身份验证后,IMAP 允许您列出、检索和搜索电子邮件,以及监控邮箱的变化。它至少支持最新的三个稳定 Rust 版本(可能甚至更老;请参阅 CI 结果)。
要连接,请使用 connect
函数。这将为您提供一个未经身份验证的 Client
。然后您可以使用 Client::login
或 Client::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(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,将按照上述方式双授权,不附加任何额外条款或条件。
依赖项
~4–15MB
~186K SLoC