Initial commit

This commit is contained in:
Andrey Golovizin 2021-07-17 13:49:20 +02:00
parent 3481f70d9d
commit 868a9d238d
6 changed files with 478 additions and 0 deletions

47
src/main.rs Normal file
View file

@ -0,0 +1,47 @@
use anyhow::anyhow;
use clap::Clap;
use mailparse::MailHeaderMap;
use std::io::Read;
/// MIME mail viewer.
#[derive(Clap, Debug)]
#[clap(version=clap::crate_version!())]
struct Opts {
filename: Option<String>,
}
fn main() -> Result<(), anyhow::Error> {
let opts = Opts::parse();
dbg!(&opts);
let input = match opts.filename {
Some(filename) => std::fs::read(filename)?,
None => {
let mut result = Vec::new();
std::io::stdin().read_to_end(&mut result)?;
result
}
};
let message = mailparse::parse_mail(&input)?;
println!(
"Subject: {}",
message
.headers
.get_first_value("Subject")
.unwrap_or_default()
);
let date_str = &message
.headers
.get_first_value("Date")
.ok_or_else(|| anyhow!("No date"))?;
dbg!(&date_str);
let date = chrono::DateTime::parse_from_rfc2822(&date_str)?;
println!("Date: {}", date);
// dbg!(&message);
//
let body = message.get_body()?;
println!("---");
print!("{}", body);
Ok(())
}