From cef3b32167f0b04f028767eceb3030eea81cabc9 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 17 Jun 2014 11:51:13 +0200 Subject: 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 45e8d9a507..46705f2e6c 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 4fd9f1473e..19184ef1db 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 e40b15b375..9d5e2d85a0 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 07a68e204a..0a46204bb0 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 (); -- cgit v1.2.3