summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/message/mu-message.cc5
-rw-r--r--lib/message/test-mu-message.cc44
2 files changed, 48 insertions, 1 deletions
diff --git a/lib/message/mu-message.cc b/lib/message/mu-message.cc
index 4c5fc4d..a8ff0f5 100644
--- a/lib/message/mu-message.cc
+++ b/lib/message/mu-message.cc
@@ -638,7 +638,10 @@ fill_document(Message::Private& priv)
const auto path{doc.string_value(Field::Id::Path)};
const auto refs{mime_msg.references()};
- const auto message_id{mime_msg.message_id().value_or(fake_message_id(path))};
+ const auto& raw_message_id = mime_msg.message_id();
+ const auto message_id = raw_message_id.has_value() && !raw_message_id->empty()
+ ? *raw_message_id
+ : fake_message_id(path);
process_message(mime_msg, path, priv);
diff --git a/lib/message/test-mu-message.cc b/lib/message/test-mu-message.cc
index bcfbbf6..a96b44b 100644
--- a/lib/message/test-mu-message.cc
+++ b/lib/message/test-mu-message.cc
@@ -969,6 +969,48 @@ id Emoji", EmojiSymbols;">
}
+static void
+test_message_message_id()
+{
+ constexpr const auto msg1 =
+R"(From: "Mu Test" <mu@djcbsoftware.nl>
+To: mu@djcbsoftware.nl
+Message-ID: <87lew9xddt.fsf@djcbsoftware.nl>
+
+abc
+)";
+
+ constexpr const auto msg2 =
+R"(From: "Mu Test" <mu@djcbsoftware.nl>
+To: mu@djcbsoftware.nl
+
+abc
+)";
+
+ constexpr const auto msg3 =
+R"(From: "Mu Test" <mu@djcbsoftware.nl>
+To: mu@djcbsoftware.nl
+Message-ID:
+
+abc
+)";
+
+ const auto m1{Message::make_from_text(msg1, "/foo/cur/m123:2,S")};
+ assert_valid_result(m1);
+
+ const auto m2{Message::make_from_text(msg2, "/foo/cur/m456:2,S")};
+ assert_valid_result(m2);
+ const auto m3{Message::make_from_text(msg3, "/foo/cur/m789:2,S")};
+ assert_valid_result(m3);
+
+ assert_equal(m1->message_id(), "87lew9xddt.fsf@djcbsoftware.nl");
+
+ /* both with absent and empty message-id, generate "random" fake one,
+ * which must end in @mu.id */
+ g_assert_true(g_str_has_suffix(m2->message_id().c_str(), "@mu.id"));
+ g_assert_true(g_str_has_suffix(m3->message_id().c_str(), "@mu.id"));
+}
+
static void
test_message_fail ()
@@ -1015,6 +1057,8 @@ main(int argc, char* argv[])
test_message_references);
g_test_add_func("/message/message/outlook-body",
test_message_outlook_body);
+ g_test_add_func("/message/message/message-id",
+ test_message_message_id);
g_test_add_func("/message/message/fail",
test_message_fail);
g_test_add_func("/message/message/sanitize-maildir",