[evolution-ews] I#150 - Mail: Message redirect sends also to original Cc/Bcc



commit 374c6f53f357d97dde904fa582ab333ae7aceed4
Author: Milan Crha <mcrha redhat com>
Date:   Mon Apr 26 18:39:34 2021 +0200

    I#150 - Mail: Message redirect sends also to original Cc/Bcc
    
    Closes https://gitlab.gnome.org/GNOME/evolution-ews/-/issues/150

 src/EWS/common/e-ews-camel-common.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)
---
diff --git a/src/EWS/common/e-ews-camel-common.c b/src/EWS/common/e-ews-camel-common.c
index 3bd5a356..9bbe33b2 100644
--- a/src/EWS/common/e-ews-camel-common.c
+++ b/src/EWS/common/e-ews-camel-common.c
@@ -65,7 +65,8 @@ filter_recipients (CamelMimeMessage *message,
 static void
 write_recipients (ESoapMessage *msg,
                  const gchar *elem_name,
-                 GHashTable *recips)
+                 GHashTable *recips,
+                 gboolean is_resend)
 {
        GHashTableIter iter;
        gpointer key, value;
@@ -74,7 +75,7 @@ write_recipients (ESoapMessage *msg,
        g_return_if_fail (elem_name != NULL);
        g_return_if_fail (recips != NULL);
 
-       if (!g_hash_table_size (recips))
+       if (!is_resend && !g_hash_table_size (recips))
                return;
 
        e_soap_message_start_element (msg, elem_name, NULL, NULL);
@@ -89,6 +90,12 @@ write_recipients (ESoapMessage *msg,
        e_soap_message_end_element (msg); /* elem_name */
 }
 
+static gboolean
+is_any_address_filled (CamelInternetAddress *addrs)
+{
+       return addrs && camel_address_length (CAMEL_ADDRESS (addrs)) > 0;
+}
+
 /* MAPI flags gleaned from windows header files */
 #define MAPI_MSGFLAG_READ      0x01
 #define MAPI_MSGFLAG_UNSENT    0x08
@@ -282,6 +289,11 @@ create_mime_message_cb (ESoapMessage *msg,
 
        if (create_data->recipients) {
                GHashTable *recip_to, *recip_cc, *recip_bcc;
+               gboolean is_resend;
+
+               is_resend = is_any_address_filled (camel_mime_message_get_recipients (create_data->message, 
CAMEL_RECIPIENT_TYPE_RESENT_TO)) ||
+                           is_any_address_filled (camel_mime_message_get_recipients (create_data->message, 
CAMEL_RECIPIENT_TYPE_RESENT_CC)) ||
+                           is_any_address_filled (camel_mime_message_get_recipients (create_data->message, 
CAMEL_RECIPIENT_TYPE_RESENT_BCC));
 
                recip_to = g_hash_table_new (camel_strcase_hash, camel_strcase_equal);
                recip_cc = g_hash_table_new (camel_strcase_hash, camel_strcase_equal);
@@ -289,9 +301,9 @@ create_mime_message_cb (ESoapMessage *msg,
 
                filter_recipients (create_data->message, create_data->recipients, recip_to, recip_cc, 
recip_bcc);
 
-               write_recipients (msg, "ToRecipients", recip_to);
-               write_recipients (msg, "CcRecipients", recip_cc);
-               write_recipients (msg, "BccRecipients", recip_bcc);
+               write_recipients (msg, "ToRecipients", recip_to, is_resend);
+               write_recipients (msg, "CcRecipients", recip_cc, is_resend);
+               write_recipients (msg, "BccRecipients", recip_bcc, is_resend);
 
                g_hash_table_destroy (recip_to);
                g_hash_table_destroy (recip_cc);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]