aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2014-06-17 17:51:13 +0800
committerMilan Crha <mcrha@redhat.com>2014-06-17 17:51:13 +0800
commitcef3b32167f0b04f028767eceb3030eea81cabc9 (patch)
treede0301721a0f42c713fb330883dc905b28b4a76d
parent5fca7d616970c1d96f35ebe898994f1d470d5a7b (diff)
downloadgsoc2013-evolution-cef3b32167f0b04f028767eceb3030eea81cabc9.tar
gsoc2013-evolution-cef3b32167f0b04f028767eceb3030eea81cabc9.tar.gz
gsoc2013-evolution-cef3b32167f0b04f028767eceb3030eea81cabc9.tar.bz2
gsoc2013-evolution-cef3b32167f0b04f028767eceb3030eea81cabc9.tar.lz
gsoc2013-evolution-cef3b32167f0b04f028767eceb3030eea81cabc9.tar.xz
gsoc2013-evolution-cef3b32167f0b04f028767eceb3030eea81cabc9.tar.zst
gsoc2013-evolution-cef3b32167f0b04f028767eceb3030eea81cabc9.zip
Bug 702703 - Be able to overwrite domain in Message IDs
-rw-r--r--composer/e-msg-composer.c23
-rw-r--r--e-util/e-html-editor-view.c12
-rw-r--r--e-util/e-html-editor-view.h3
-rw-r--r--modules/mdn/evolution-mdn.c16
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 ();