static gssize mime_message_write_to_stream_sync (CamelDataWrapper *data_wrapper, CamelStream *stream, GCancellable *cancellable, GError **error) { CamelDataWrapperClass *data_wrapper_class; CamelMimeMessage *mm = CAMEL_MIME_MESSAGE (data_wrapper); /* force mandatory headers ... */ if (mm->from == NULL) { /* FIXME: should we just abort? Should we make one up? */ g_warning ("No from set for message"); camel_medium_set_header ((CamelMedium *) mm, "From", ""); } if (!camel_medium_get_header ((CamelMedium *) mm, "Date")) camel_mime_message_set_date (mm, CAMEL_MESSAGE_DATE_CURRENT, 0); if (mm->subject == NULL) camel_mime_message_set_subject (mm, "No Subject"); if (mm->message_id == NULL) camel_mime_message_set_message_id (mm, NULL); /* FIXME: "To" header needs to be set explicitly as well ... */ if (!camel_medium_get_header ((CamelMedium *) mm, "Mime-Version")) camel_medium_set_header ((CamelMedium *) mm, "Mime-Version", "1.0"); /* Chain up to parent's write_to_stream_sync() method. */ data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS ( camel_mime_message_parent_class); return data_wrapper_class->write_to_stream_sync ( data_wrapper, stream, cancellable, error); }
static TnyMsg * tny_camel_partial_msg_receive_strategy_perform_get_msg_default (TnyMsgReceiveStrategy *self, TnyFolder *folder, TnyHeader *header, GError **err) { TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (folder); TnyMsg *message = NULL; CamelMimeMessage *camel_message = NULL; gchar *id; CamelException ex = CAMEL_EXCEPTION_INITIALISER; CamelFolderReceiveType mtype = CAMEL_FOLDER_RECEIVE_PARTIAL; g_assert (TNY_IS_HEADER (header)); if (!priv->strict_retrieval) mtype = CAMEL_FOLDER_RECEIVE_ANY_OR_PARTIAL; id = tny_header_dup_uid (TNY_HEADER (header)); message = NULL; camel_message = camel_folder_get_message (priv->folder, (const char *) id, mtype, -1, &ex); g_free (id); if (camel_exception_is_set (&ex)) { _tny_camel_exception_to_tny_error (&ex, err); camel_exception_clear (&ex); } else { if (camel_message && CAMEL_IS_OBJECT (camel_message)) { TnyHeader *nheader = NULL; nheader = _tny_camel_msg_header_new (CAMEL_MIME_MESSAGE (camel_message), folder, tny_header_get_date_received (header)); _tny_camel_msg_header_set_decorated (TNY_CAMEL_MSG_HEADER (nheader), header, FALSE); message = tny_camel_msg_new (); _tny_camel_msg_set_received (TNY_CAMEL_MSG (message), tny_header_get_date_received (header)); _tny_camel_msg_set_folder (TNY_CAMEL_MSG (message), folder); TNY_CAMEL_MSG_HEADER (nheader)->old_uid = tny_header_dup_uid (header); _tny_camel_msg_set_header (TNY_CAMEL_MSG (message), nheader); _tny_camel_mime_part_set_part (TNY_CAMEL_MIME_PART (message), CAMEL_MIME_PART (camel_message)); tny_header_set_flag (nheader, TNY_HEADER_FLAG_CACHED); tny_header_set_flag (nheader, TNY_HEADER_FLAG_PARTIAL); g_object_unref (nheader); tny_header_set_flag (header, TNY_HEADER_FLAG_CACHED); tny_header_set_flag (header, TNY_HEADER_FLAG_PARTIAL); } } if (camel_message && CAMEL_IS_OBJECT (camel_message)) camel_object_unref (CAMEL_OBJECT (camel_message)); return message; }
static void mime_message_finalize (GObject *object) { CamelMimeMessage *message = CAMEL_MIME_MESSAGE (object); g_free (message->subject); g_free (message->message_id); g_hash_table_foreach (message->recipients, unref_recipient, NULL); g_hash_table_destroy (message->recipients); /* Chain up to parent's finalize() method. */ G_OBJECT_CLASS (camel_mime_message_parent_class)->finalize (object); }
static gssize mime_message_write_to_output_stream_sync (CamelDataWrapper *data_wrapper, GOutputStream *output_stream, GCancellable *cancellable, GError **error) { CamelMimeMessage *message; message = CAMEL_MIME_MESSAGE (data_wrapper); mime_message_ensure_required_headers (message); /* Chain up to parent's write_to_output_stream_sync() method. */ return CAMEL_DATA_WRAPPER_CLASS (camel_mime_message_parent_class)-> write_to_output_stream_sync ( data_wrapper, output_stream, cancellable, error); }
static void mime_message_dispose (GObject *object) { CamelMimeMessage *message = CAMEL_MIME_MESSAGE (object); if (message->reply_to != NULL) { g_object_unref (message->reply_to); message->reply_to = NULL; } if (message->from != NULL) { g_object_unref (message->from); message->from = NULL; } /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (camel_mime_message_parent_class)->dispose (object); }
static void emfqe_format_header (EMailFormatter *formatter, EMailFormatterContext *context, GString *buffer, EMailPart *part, const gchar *header_name, const gchar *charset) { CamelMimePart *mime_part; EMailFormatterHeaderFlags flags; gchar *canon_name, *buf, *value = NULL; const gchar *txt, *label; gboolean addrspec = FALSE; gint is_html = FALSE; gint i; /* Skip Face header in prints, which includes also message forward */ if (context->mode == E_MAIL_FORMATTER_MODE_PRINTING && g_ascii_strcasecmp (header_name, "Face") == 0) return; flags = E_MAIL_FORMATTER_HEADER_FLAG_NOELIPSIZE; canon_name = g_alloca (strlen (header_name) + 1); strcpy (canon_name, header_name); e_mail_formatter_canon_header_name (canon_name); /* Never quote Bcc/Resent-Bcc headers. */ if (g_str_equal (canon_name, "Bcc")) return; if (g_str_equal (canon_name, "Resent-Bcc")) return; mime_part = e_mail_part_ref_mime_part (part); for (i = 0; addrspec_hdrs[i]; i++) { if (g_str_equal (canon_name, addrspec_hdrs[i])) { addrspec = TRUE; break; } } label = _(canon_name); if (addrspec) { CamelMedium *medium; struct _camel_header_address *addrs; GString *html; gchar *charset; medium = CAMEL_MEDIUM (mime_part); txt = camel_medium_get_header (medium, canon_name); if (txt == NULL) return; charset = e_mail_formatter_dup_charset (formatter); if (!charset) charset = e_mail_formatter_dup_default_charset (formatter); buf = camel_header_unfold (txt); addrs = camel_header_address_decode (txt, charset); g_free (charset); if (addrs == NULL) { g_free (buf); return; } g_free (buf); html = g_string_new (""); e_mail_formatter_format_address (formatter, html, addrs, canon_name, FALSE, FALSE); camel_header_address_unref (addrs); txt = value = html->str; g_string_free (html, FALSE); flags |= E_MAIL_FORMATTER_HEADER_FLAG_BOLD; is_html = TRUE; } else if (g_str_equal (canon_name, "Subject")) { CamelMimeMessage *message; message = CAMEL_MIME_MESSAGE (mime_part); txt = camel_mime_message_get_subject (message); label = _("Subject"); flags |= E_MAIL_FORMATTER_HEADER_FLAG_BOLD; } else if (g_str_equal (canon_name, "X-Evolution-Mailer")) { CamelMedium *medium; medium = CAMEL_MEDIUM (mime_part); txt = camel_medium_get_header (medium, "x-mailer"); if (txt == NULL) txt = camel_medium_get_header (medium, "user-agent"); if (txt == NULL) txt = camel_medium_get_header (medium, "x-newsreader"); if (txt == NULL) txt = camel_medium_get_header (medium, "x-mimeole"); if (txt == NULL) return; txt = value = camel_header_format_ctext (txt, charset); label = _("Mailer"); flags |= E_MAIL_FORMATTER_HEADER_FLAG_BOLD; } else if (g_str_equal (canon_name, "Date") || g_str_equal (canon_name, "Resent-Date")) { CamelMedium *medium; medium = CAMEL_MEDIUM (mime_part); txt = camel_medium_get_header (medium, canon_name); if (txt == NULL) return; flags |= E_MAIL_FORMATTER_HEADER_FLAG_BOLD; } else { CamelMedium *medium; medium = CAMEL_MEDIUM (mime_part); txt = camel_medium_get_header (medium, canon_name); buf = camel_header_unfold (txt); txt = value = camel_header_decode_string (txt, charset); g_free (buf); } emfqe_format_text_header (formatter, buffer, label, txt, flags, is_html); g_free (value); g_object_unref (mime_part); }
/* FIXME: check format of fields. */ static gboolean process_header (CamelMedium *medium, const gchar *name, const gchar *value) { CamelHeaderType header_type; CamelMimeMessage *message = CAMEL_MIME_MESSAGE (medium); CamelInternetAddress *addr; const gchar *charset; gchar *unfolded; header_type = (CamelHeaderType) g_hash_table_lookup (header_name_table, name); switch (header_type) { case HEADER_FROM: addr = camel_internet_address_new (); unfolded = camel_header_unfold (value); if (camel_address_decode ((CamelAddress *) addr, unfolded) <= 0) { g_object_unref (addr); } else { if (message->from) g_object_unref (message->from); message->from = addr; } g_free (unfolded); break; case HEADER_REPLY_TO: addr = camel_internet_address_new (); unfolded = camel_header_unfold (value); if (camel_address_decode ((CamelAddress *) addr, unfolded) <= 0) { g_object_unref (addr); } else { if (message->reply_to) g_object_unref (message->reply_to); message->reply_to = addr; } g_free (unfolded); break; case HEADER_SUBJECT: g_free (message->subject); if (((CamelDataWrapper *) message)->mime_type) { charset = camel_content_type_param (((CamelDataWrapper *) message)->mime_type, "charset"); charset = camel_iconv_charset_name (charset); } else charset = NULL; unfolded = camel_header_unfold (value); message->subject = g_strstrip (camel_header_decode_string (unfolded, charset)); g_free (unfolded); break; case HEADER_TO: case HEADER_CC: case HEADER_BCC: case HEADER_RESENT_TO: case HEADER_RESENT_CC: case HEADER_RESENT_BCC: addr = g_hash_table_lookup (message->recipients, name); if (value) { unfolded = camel_header_unfold (value); camel_address_decode (CAMEL_ADDRESS (addr), unfolded); g_free (unfolded); } else { camel_address_remove (CAMEL_ADDRESS (addr), -1); } return FALSE; case HEADER_DATE: if (value) { message->date = camel_header_decode_date (value, &message->date_offset); } else { message->date = CAMEL_MESSAGE_DATE_CURRENT; message->date_offset = 0; } break; case HEADER_MESSAGE_ID: g_free (message->message_id); if (value) message->message_id = camel_header_msgid_decode (value); else message->message_id = NULL; break; default: return FALSE; } return TRUE; }