1 个不稳定版本
0.1.0 | 2024 年 1 月 11 日 |
---|
#222 in 电子邮件
32KB
681 行
Pop3 邮件客户端
许多 Rust Pop3 客户端之一。
它与其他客户端的不同之处在于使用了类型状态提供了一些额外的安全性(在没有连接和/或登录的情况下无法编译),还提供了一些便捷方法。
尽管如此,根据非常有限的测试,性能与其他提到的项目的性能大致相同。
安装
cargo安装 pop3_mail_client
或将以下内容添加到 Cargo.toml
[dependencies]
pop3_mail_client = "0.1.0"
示例
使用构建器创建客户端并开始调用客户端方法。
use pop3_mail_client::{Pop3Connection, Pop3Client, Pop3Error};
fn main() -> Result<(), Pop3Error> {
let mut connection = Pop3Client::builder()
.username("[email protected]")
.password("some-pass")
.connect(Pop3Connection::outlook())?;
// retrieve stats
let stats = connection.stat()?;
println!("{stats:?}");
// or list messages and print their ids
let lists = connection.list()?;
lists.messages.iter().for_each(|m| println!("{}", m.message_id));
// retrieve a message as a string
let res = connection.retrieve_as_string(9999);
println!("{:?}", res);
Ok(())
}
Pop3Error
是所有可能错误的联合体。
或者,您还可以针对每个方法返回的具体错误进行匹配
use pop3_mail_client::{Pop3Connection, Pop3Client, Pop3Error, ListError};
fn main() -> Result<(), Pop3Error> {
let mut connection = Pop3Client::builder()
.username("[email protected]")
.password("some-pass")
.connect(Pop3Connection::outlook())?;
match connection.list() {
// we got back a list of messages
Ok(list) => {
list.messages.iter().for_each(|m| println!("{}", m.message_id));
}
// list might return a ListError
Err(ListError { message }) => {
println!("An error: {}", message);
}
}
Ok(())
}
错误
Pop3Error
是以下错误的联合(枚举)
- 连接错误
- 状态错误
- 列表错误
- 检索错误
- 删除错误
- 重置错误
- 空操作错误
- 顶部错误
- UID 错误
实现的命令
命令名称,以及在此实现中的名称。
- stat
- list (
list
和list_id
) - retr (
retrieve
或retrieve_as_string
) - rset (
reset
) - dele (
delete
) - uidl (
uidl
和uidl_with_id
) - noop
- top
便捷命令
list_last
(列出最后 x 条消息 ID 和大小)retrieve_last_as_string
(将最后一封电子邮件作为字符串检索)retrieve_last
(检索最后一封电子邮件并将其传递给写入器)
未实现
- apop
原始 RFC
https://www.ietf.org/rfc/rfc1939.txt
类似项目
- https://github.com/mattnenterprise/rust-pop3(已弃用 -> 分支)
- https://github.com/falk-werner/rust-pop3-client(正常工作)
待办事项
- 更多便捷方法?
- 将所有内容从 lib.rs 移动到单独的文件并重新导出?
依赖关系
~7–15MB
~282K SLoC