1 个不稳定版本

0.1.0 2024 年 1 月 11 日

#222 in 电子邮件

MIT 许可证

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 (listlist_id)
  • retr (retrieveretrieve_as_string)
  • rset (reset)
  • dele (delete)
  • uidl (uidluidl_with_id)
  • noop
  • top

便捷命令

  • list_last(列出最后 x 条消息 ID 和大小)
  • retrieve_last_as_string(将最后一封电子邮件作为字符串检索)
  • retrieve_last(检索最后一封电子邮件并将其传递给写入器)

未实现

  • apop

原始 RFC

https://www.ietf.org/rfc/rfc1939.txt

类似项目

待办事项

  • 更多便捷方法?
  • 将所有内容从 lib.rs 移动到单独的文件并重新导出?

依赖关系

~7–15MB
~282K SLoC