+static TnyMimePart *
+add_html_body_part (TnyMsg *msg,
+ const gchar *body)
+{
+ TnyMimePart *html_body_part = NULL;
+ TnyStream *html_body_stream;
+
+ /* Create the stream */
+ html_body_stream = TNY_STREAM (tny_camel_stream_new
+ (camel_stream_mem_new_with_buffer
+ (body, strlen(body))));
+
+ /* Create body part if needed */
+ html_body_part = modest_formatter_create_body_part (NULL, msg);
+
+ /* Construct MIME part */
+ tny_stream_reset (html_body_stream);
+ tny_mime_part_construct_from_stream (html_body_part,
+ html_body_stream,
+ "text/html; charset=utf-8");
+ tny_stream_reset (html_body_stream);
+
+ g_object_unref (G_OBJECT(html_body_part));
+
+ /* Clean */
+ g_object_unref (html_body_stream);
+
+ return html_body_part;
+}
+
+static TnyMimePart *
+copy_mime_part (TnyMimePart *part)
+{
+ TnyMimePart *result = NULL;
+ const gchar *attachment_content_type;
+ const gchar *attachment_filename;
+ const gchar *attachment_cid;
+ TnyList *parts;
+ TnyIterator *iterator;
+ TnyStream *attachment_stream;
+
+ if (TNY_IS_MSG (part)) {
+ result = TNY_MIME_PART (tny_platform_factory_new_msg (modest_runtime_get_platform_factory ()));
+ attachment_content_type = "message/rfc822";
+ tny_mime_part_set_content_type (result, attachment_content_type);
+ } else {
+ result = tny_platform_factory_new_mime_part (
+ modest_runtime_get_platform_factory());
+ attachment_content_type = tny_mime_part_get_content_type (part);
+ }
+
+ /* get mime part headers */
+ attachment_filename = tny_mime_part_get_filename (part);
+ attachment_cid = tny_mime_part_get_content_id (part);
+
+ /* fill the stream */
+ attachment_stream = tny_mime_part_get_stream (part);
+ tny_stream_reset (attachment_stream);
+ tny_mime_part_construct_from_stream (result,
+ attachment_stream,
+ attachment_content_type);
+ tny_stream_reset (attachment_stream);
+
+ /* set other mime part fields */
+ tny_mime_part_set_filename (result, attachment_filename);
+ tny_mime_part_set_content_id (result, attachment_cid);
+
+ /* copy subparts */
+ parts = tny_simple_list_new ();
+ tny_mime_part_get_parts (part, parts);
+ iterator = tny_list_create_iterator (parts);
+ while (!tny_iterator_is_done (iterator)) {
+ TnyMimePart *subpart = TNY_MIME_PART (tny_iterator_get_current (iterator));
+ TnyMimePart *subpart_copy = copy_mime_part (subpart);
+ tny_mime_part_add_part (result, subpart_copy);
+ g_object_unref (subpart);
+ tny_iterator_next (iterator);
+ }
+ g_object_unref (iterator);
+ g_object_unref (parts);
+ g_object_unref (attachment_stream);
+
+ return result;
+}
+