diff --git a/Cargo.lock b/Cargo.lock index ff0b35f..02affb5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -176,6 +176,7 @@ dependencies = [ "chrono", "clap", "mailparse", + "mime", ] [[package]] @@ -189,6 +190,12 @@ dependencies = [ "quoted_printable", ] +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + [[package]] name = "num-integer" version = "0.1.44" diff --git a/Cargo.toml b/Cargo.toml index ba7693f..8841df8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,3 +12,4 @@ anyhow = "1.0.42" chrono = "0.4.19" clap = { version = "3.0.0-beta.2", features = ["derive"] } mailparse = "0.13.5" +mime = "0.3.16" diff --git a/src/parsing.rs b/src/parsing.rs index 052a418..776fc6e 100644 --- a/src/parsing.rs +++ b/src/parsing.rs @@ -1,9 +1,9 @@ -use mailparse::{DispositionType, MailParseError, ParsedMail}; +use mailparse::{DispositionType, ParsedMail}; pub trait ParsedMailEx { fn is_attachment(&self) -> bool; - fn get_body_text(&self) -> Result, MailParseError>; + fn get_body_text(&self) -> Result, anyhow::Error>; } impl<'a> ParsedMailEx for ParsedMail<'a> { @@ -11,11 +11,12 @@ impl<'a> ParsedMailEx for ParsedMail<'a> { self.get_content_disposition().disposition == DispositionType::Attachment } - fn get_body_text(&self) -> Result, MailParseError> { + fn get_body_text(&self) -> Result, anyhow::Error> { + let mimetype: mime::Mime = self.ctype.mimetype.parse()?; if self.is_attachment() { return Ok(None); } - if self.ctype.mimetype == "text/plain" { + if mimetype == mime::TEXT_PLAIN { return Ok(Some(self.get_body()?)); } for subpart in &self.subparts {