[evolution-ews/gnome-3-18] [Camel] Fill message From header if missing in received MIME content
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews/gnome-3-18] [Camel] Fill message From header if missing in received MIME content
- Date: Mon, 23 Nov 2015 17:51:32 +0000 (UTC)
commit 7514728aa9087a581125e9c997e27a8060062e5d
Author: Milan Crha <mcrha redhat com>
Date: Mon Nov 23 18:45:02 2015 +0100
[Camel] Fill message From header if missing in received MIME content
Messages int he Sent folder could have missing From header when sent by
the evolution-ews. The From/Sender is still available, only not present
in the MIME content, thus fill it if necessary.
src/camel/camel-ews-folder.c | 38 +++++++++++++++++++++++++++++++++++++-
1 files changed, 37 insertions(+), 1 deletions(-)
---
diff --git a/src/camel/camel-ews-folder.c b/src/camel/camel-ews-folder.c
index c002738..538f9fa 100644
--- a/src/camel/camel-ews-folder.c
+++ b/src/camel/camel-ews-folder.c
@@ -560,7 +560,7 @@ camel_ews_folder_get_message (CamelFolder *folder,
}
add_props = e_ews_additional_props_new ();
- add_props->field_uri = g_strdup ("item:MimeContent");
+ add_props->field_uri = g_strdup ("item:MimeContent message:From message:Sender");
res = e_ews_connection_get_items_sync (
cnc, pri, ids, "IdOnly", add_props,
@@ -662,6 +662,42 @@ camel_ews_folder_get_message (CamelFolder *folder,
g_free (cache_file);
message = camel_ews_folder_get_message_from_cache (ews_folder, uid, cancellable, error);
+ if (message) {
+ CamelInternetAddress *from;
+ const gchar *email = NULL;
+
+ from = camel_mime_message_get_from (message);
+
+ if (!from || !camel_internet_address_get (from, 0, NULL, &email) || !email || !*email) {
+ const EwsMailbox *mailbox;
+
+ mailbox = e_ews_item_get_from (items->data);
+ if (!mailbox)
+ mailbox = e_ews_item_get_sender (items->data);
+ if (mailbox) {
+ CamelStream *cache_stream;
+
+ email = NULL;
+
+ if (g_strcmp0 (mailbox->routing_type, "EX") == 0)
+ email = e_ews_item_util_strip_ex_address (mailbox->email);
+
+ from = camel_internet_address_new ();
+ camel_internet_address_add (from, mailbox->name, email ? email :
mailbox->email);
+ camel_mime_message_set_from (message, from);
+ g_object_unref (from);
+
+ g_rec_mutex_lock (&priv->cache_lock);
+ /* Ignore errors here, it's nothing fatal in this case */
+ cache_stream = ews_data_cache_get (ews_folder->cache, "cur", uid, NULL);
+ if (cache_stream) {
+ camel_data_wrapper_write_to_stream_sync (CAMEL_DATA_WRAPPER
(message), cache_stream, cancellable, NULL);
+ g_object_unref (cache_stream);
+ }
+ g_rec_mutex_unlock (&priv->cache_lock);
+ }
+ }
+ }
exit:
g_mutex_lock (&priv->state_lock);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]