#pop3-client #pop3 #email #rustls #command #rutls

rust-pop3-client

基于 rustls 的 POP3 客户端

2 个版本

0.2.1 2023 年 2 月 21 日
0.2.0 2023 年 2 月 21 日

#4#pop3-client

MPL-2.0 许可证

16KB
245 代码行

rust-pop3-client

使用 rutls 的 rust POP3 客户端。

特性

  • 提供所有必需的 POP3 命令
  • 提供大多数可选的 POP3 命令
    (APOP 未提供,因为它不常用)
  • 允许指定自己的证书
    (如果未提供,则将使用系统证书,可以提供一个 rustls::RootCertStore 实例)

依赖

Cargo.toml

[dependencies]
rust-pop3-client = "0.2.1"

示例

use std::error::Error;
use std::io::{self, Write};

extern crate rust_pop3_client;

use rust_pop3_client::Pop3Connection;

fn read_value(prompt: &str) -> Result<String, Box<dyn Error>> {
    print!("{}: ", prompt);
    io::stdout().flush()?;
    let mut value = String::new();
    io::stdin().read_line(&mut value)?;
    Ok(String::from(value.trim()))
}

fn read_password(prompt: &str) -> Result<String, Box<dyn Error>> {
    print!("{}: ", prompt);
    io::stdout().flush()?;
    Ok(rpassword::read_password()?)
}

fn main() -> Result<(), Box<dyn Error>> {
    let host = read_value("host (e.g. pop.gmail.com)")?;
    let port = read_value("port (e.g. 995)")?.parse::<u16>()?;
    let user = read_value("user (e-mail address)")?;
    let password = read_password("password")?;

    let mut connection = Pop3Connection::new(&host, port)?;
    connection.login(&user, &password)?;

    println!("id\tsize");
    let infos = connection.list()?;
    for info in infos {
        println!("{}\t{}", info.message_id, info.message_size);
    }

    Ok(())
}

类似项目

  • rust-pop3
    (看起来很有前途,但基于过时的 OpenSSL 版本。)

参考

依赖

~7–17MB
~303K SLoC