summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-01-02 17:35:32 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-01-02 21:16:14 +0100
commitba17174e9482503c089ff9d6deab96c0f1168022 (patch)
tree191141ccef1f367b9e66a677947ff5b9615660f6
parenteca2fa3af474ed7bc27363398dc59967da320207 (diff)
Optimization: Get the Message-Id from the header, if it is there
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--lib/domain/libimagmail/src/mail.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/domain/libimagmail/src/mail.rs b/lib/domain/libimagmail/src/mail.rs
index 78d2e67a..1d2f5a2d 100644
--- a/lib/domain/libimagmail/src/mail.rs
+++ b/lib/domain/libimagmail/src/mail.rs
@@ -20,6 +20,7 @@
use failure::Fallible as Result;
use failure::ResultExt;
use failure::Error;
+use toml_query::read::TomlValueReadExt;
use libimagstore::store::Entry;
use libimagentryutil::isa::Is;
@@ -113,8 +114,14 @@ impl Mail for Entry {
///
/// Use `Mail::mail_header()` if you need to read more than one field.
fn get_message_id(&self, refconfig: &RefConfig) -> Result<Option<MessageId>> {
- self.get_field(refconfig, "Message-ID")
- .map(|o| o.map(crate::util::strip_message_delimiters).map(MessageId::from))
+ if let Some(s) = self.get_header().read("mail.message-id")? {
+ let s = s.as_str()
+ .ok_or_else(|| format_err!("'mail.message-id' is not a String in {}", self.get_location()))?;
+ Ok(Some(MessageId::from(String::from(s))))
+ } else {
+ self.get_field(refconfig, "Message-ID")
+ .map(|o| o.map(crate::util::strip_message_delimiters).map(MessageId::from))
+ }
}
/// Get a value of the `In-Reply-To` field of the mail file