[evolution] Bug 702703 - Be able to overwrite domain in Message IDs



commit cef3b32167f0b04f028767eceb3030eea81cabc9
Author: Milan Crha <mcrha redhat com>
Date:   Tue Jun 17 11:51:13 2014 +0200

    Bug 702703 - Be able to overwrite domain in Message IDs

 composer/e-msg-composer.c   |   23 ++++++++++++++++++++---
 e-util/e-html-editor-view.c |   12 +++++++-----
 e-util/e-html-editor-view.h |    3 ++-
 modules/mdn/evolution-mdn.c |   16 ++++++----------
 4 files changed, 35 insertions(+), 19 deletions(-)
---
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 45e8d9a..46705f2 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -1096,7 +1096,8 @@ composer_build_message (EMsgComposer *composer,
        CamelMimePart *part;
        GByteArray *data;
        ESource *source;
-       gchar *charset;
+       gchar *charset, *message_uid;
+       const gchar *from_domain;
        gint i;
 
        priv = composer->priv;
@@ -1153,9 +1154,25 @@ composer_build_message (EMsgComposer *composer,
 
        context->message = camel_mime_message_new ();
 
+       if (context->from && camel_internet_address_get (context->from, 0, NULL, &from_domain)) {
+               const gchar *at = strchr (from_domain, '@');
+               if (at)
+                       from_domain = at + 1;
+               else
+                       from_domain = NULL;
+       } else {
+               from_domain = NULL;
+       }
+
+       if (!from_domain || !*from_domain)
+               from_domain = "localhost";
+
+       message_uid = camel_header_msgid_generate (from_domain);
+
        /* Explicitly generate a Message-ID header here so it's
         * consistent for all outbound streams (SMTP, Fcc, etc). */
-       camel_mime_message_set_message_id (context->message, NULL);
+       camel_mime_message_set_message_id (context->message, message_uid);
+       g_free (message_uid);
 
        build_message_headers (composer, context->message, FALSE);
        for (i = 0; i < priv->extra_hdr_names->len; i++) {
@@ -1343,7 +1360,7 @@ composer_build_message (EMsgComposer *composer,
 
                editor = e_msg_composer_get_editor (composer);
                view = e_html_editor_get_view (editor);
-               inline_images = e_html_editor_view_get_parts_for_inline_images (view);
+               inline_images = e_html_editor_view_get_parts_for_inline_images (view, from_domain);
 
                data = g_byte_array_new ();
                text = e_html_editor_view_get_text_html (view);
diff --git a/e-util/e-html-editor-view.c b/e-util/e-html-editor-view.c
index 4fd9f14..19184ef 100644
--- a/e-util/e-html-editor-view.c
+++ b/e-util/e-html-editor-view.c
@@ -6042,7 +6042,8 @@ e_html_editor_view_check_magic_links (EHTMLEditorView *view,
 static CamelMimePart *
 e_html_editor_view_add_inline_image_from_element (EHTMLEditorView *view,
                                                   WebKitDOMElement *element,
-                                                  const gchar *attribute)
+                                                  const gchar *attribute,
+                                                 const gchar *uid_domain)
 {
        CamelStream *stream;
        CamelDataWrapper *wrapper;
@@ -6092,7 +6093,7 @@ e_html_editor_view_add_inline_image_from_element (EHTMLEditorView *view,
        camel_medium_set_content (CAMEL_MEDIUM (part), wrapper);
        g_object_unref (wrapper);
 
-       cid = camel_header_msgid_generate ();
+       cid = camel_header_msgid_generate (uid_domain);
        camel_mime_part_set_content_id (part, cid);
        name = webkit_dom_element_get_attribute (element, "data-name");
        camel_mime_part_set_filename (part, name);
@@ -6107,7 +6108,8 @@ out:
 }
 
 GList *
-e_html_editor_view_get_parts_for_inline_images (EHTMLEditorView *view)
+e_html_editor_view_get_parts_for_inline_images (EHTMLEditorView *view,
+                                               const gchar *uid_domain)
 {
        GHashTable *added;
        GList *parts = NULL;
@@ -6131,7 +6133,7 @@ e_html_editor_view_get_parts_for_inline_images (EHTMLEditorView *view)
 
                if (!g_hash_table_lookup (added, src)) {
                        part = e_html_editor_view_add_inline_image_from_element (
-                               view, WEBKIT_DOM_ELEMENT (node), "src");
+                               view, WEBKIT_DOM_ELEMENT (node), "src", uid_domain);
                        parts = g_list_append (parts, part);
                        g_hash_table_insert (
                                added, src, (gpointer) camel_mime_part_get_content_id (part));
@@ -6165,7 +6167,7 @@ e_html_editor_view_get_parts_for_inline_images (EHTMLEditorView *view)
 
                if (!g_hash_table_lookup (added, src)) {
                        part = e_html_editor_view_add_inline_image_from_element (
-                               view, WEBKIT_DOM_ELEMENT (node), "background");
+                               view, WEBKIT_DOM_ELEMENT (node), "background", uid_domain);
                        if (part) {
                                parts = g_list_append (parts, part);
                                g_hash_table_insert (
diff --git a/e-util/e-html-editor-view.h b/e-util/e-html-editor-view.h
index e40b15b..9d5e2d8 100644
--- a/e-util/e-html-editor-view.h
+++ b/e-util/e-html-editor-view.h
@@ -158,7 +158,8 @@ void                e_html_editor_view_add_inline_image_from_mime_part
                                                (EHTMLEditorView *view,
                                                  CamelMimePart *part);
 GList *                e_html_editor_view_get_parts_for_inline_images
-                                               (EHTMLEditorView *view);
+                                               (EHTMLEditorView *view,
+                                                const gchar *uid_domain);
 G_END_DECLS
 
 #endif /* E_HTML_EDITOR_VIEW_H */
diff --git a/modules/mdn/evolution-mdn.c b/modules/mdn/evolution-mdn.c
index 07a68e2..0a46204 100644
--- a/modules/mdn/evolution-mdn.c
+++ b/modules/mdn/evolution-mdn.c
@@ -229,8 +229,7 @@ mdn_notify_sender (ESource *identity_source,
        const gchar *transport_uid;
        const gchar *self_address;
        const gchar *sent_folder_uri;
-       gchar *fake_msgid;
-       gchar *hostname;
+       const gchar *hostname;
        gchar *receipt_subject;
        gchar *disposition;
        gchar *recipient;
@@ -275,13 +274,11 @@ mdn_notify_sender (ESource *identity_source,
        transport_uid = e_source_mail_submission_get_transport_uid (
                E_SOURCE_MAIL_SUBMISSION (extension));
 
-       /* We use camel_header_msgid_generate() to get a canonical
-        * hostname, then skip the part leading to '@' */
-       fake_msgid = camel_header_msgid_generate ();
-       hostname = strchr (fake_msgid, '@');
-       g_return_if_fail (hostname != NULL);
-
-       hostname++;
+       hostname = self_address ? strchr (self_address, '@') : NULL;
+       if (hostname)
+               hostname++;
+       else
+               hostname = "localhost";
 
        /* Create toplevel container. */
        body = camel_multipart_new ();
@@ -351,7 +348,6 @@ mdn_notify_sender (ESource *identity_source,
 
        g_free (ua);
        g_free (recipient);
-       g_free (fake_msgid);
        g_free (disposition);
 
        part = camel_mime_part_new ();


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