use msg_parser::Outlook;
fn main() {
let path = std::env::args()
.nth(1)
.unwrap_or("data/test_email.msg".into());
let outlook = Outlook::from_path(&path).unwrap();
println!("{}", outlook);
println!("Class: {}", outlook.message_class);
println!("Importance: {}", outlook.importance);
println!("Sensitivity: {}", outlook.sensitivity);
if !outlook.message_delivery_time.is_empty() {
println!("Delivered: {}", outlook.message_delivery_time);
}
if !outlook.client_submit_time.is_empty() {
println!("Submitted: {}", outlook.client_submit_time);
}
let preview: String = outlook.body.chars().take(100).collect();
println!("Body: {}...", preview.replace("\r\n", " "));
let html = if !outlook.html.is_empty() {
Some(outlook.html.clone())
} else {
outlook.html_from_rtf()
};
if let Some(ref h) = html {
let preview: String = h.chars().take(80).collect();
println!("HTML: {}...", preview);
}
if let Some(rtf) = outlook.rtf_decompressed() {
println!("RTF: {} bytes decompressed", rtf.len());
}
println!("\nAttachments: {}", outlook.attachments.len());
for attach in &outlook.attachments {
println!(" - {}", attach);
if !attach.content_id.is_empty() {
println!(" Content-ID: {}", attach.content_id);
}
if let Some(result) = attach.as_message() {
match result {
Ok(nested) => {
println!(" Embedded message:");
println!(" Subject: {}", nested.subject);
println!(" From: {}", nested.sender);
println!(
" To: {:?}",
nested.to.iter().map(|p| p.to_string()).collect::<Vec<_>>()
);
}
Err(e) => println!(" Failed to parse embedded message: {}", e),
}
}
}
}