static void write_result(GMimeMessage* m, const char* fn) { FILE* of = stdout; if ( fn ) { of = fopen(fn, "w"); } GMimeStream* fst = g_mime_stream_file_new(of); GMimeFilter* flt = g_mime_filter_crlf_new(TRUE, FALSE); GMimeStream* st = g_mime_stream_filter_new(fst); time_t dt; int tz_off = 0; if ( !g_mime_message_get_message_id(m) ) { char* mid = g_mime_utils_generate_message_id("MG"); g_mime_message_set_message_id(m, mid); g_free(mid); } g_mime_message_get_date(m, &dt, &tz_off); if ( !dt ) { g_mime_message_set_date(m, time(NULL), 0); } g_mime_stream_filter_add(GMIME_STREAM_FILTER(st), flt); g_mime_object_write_to_stream(GMIME_OBJECT(m), st); g_object_unref(st); g_object_unref(flt); g_object_unref(fst); }
static MessageData *convert_message(GMimeMessage *message, guint content_option) { if (!message) return NULL; MessageData *md = new_message_data(); const gchar *message_id = g_mime_message_get_message_id(message); if (message_id) md->message_id = g_strdup(message_id); md->from = get_from_addresses(message); md->reply_to = get_reply_to_addresses(message); md->to = get_to_addresses(message); md->cc = get_cc_addresses(message); md->bcc = get_bcc_addresses(message); const gchar *subject = g_mime_message_get_subject(message); if (subject) md->subject = g_strdup(subject); md->date = g_mime_message_get_date_as_string(message); const gchar *in_reply_to = g_mime_object_get_header(GMIME_OBJECT (message), "In-Reply-To"); if (in_reply_to) { gchar *in_reply_to_str = g_mime_utils_header_decode_text(in_reply_to); md->in_reply_to = g_mime_references_decode(in_reply_to_str); g_free(in_reply_to_str); } const gchar *references = g_mime_object_get_header(GMIME_OBJECT (message), "References"); if (references) { gchar *references_str = g_mime_utils_header_decode_text(references); md->references = g_mime_references_decode(references_str); g_free(references_str); } if (content_option) { PartCollectorData *pc = collect_parts(message, content_option); if (pc->text_part) md->text = get_body(pc->text_part, (content_option != COLLECT_RAW_CONTENT), NULL); if (pc->html_part) md->html = get_body(pc->html_part, (content_option != COLLECT_RAW_CONTENT), pc->inlines); md->attachments = get_attachments(pc); free_part_collector_data(pc); } return md; }
void extract_headers (GMimeMessage *message, GMimeStream *out_stream) { const char *subject; char *escaped_subject; const char *sender; char *escaped_sender; const char *reply_to; char *escaped_reply_to; time_t t; int tz; char buf[64]; struct tm *t_m; subject = g_mime_message_get_subject(message); escaped_subject = str_replace((char *) subject, "\"", ""); g_mime_stream_printf (out_stream, "subject: \"%s\", ", escaped_subject); g_mime_stream_printf (out_stream, "message_id: \"%s\", ", g_mime_message_get_message_id(message)); sender = g_mime_message_get_sender(message); escaped_sender = str_replace((char *) sender, "\"", ""); g_mime_stream_printf (out_stream, "sender: \"%s\", ", escaped_sender); reply_to = g_mime_message_get_reply_to(message); escaped_reply_to = str_replace((char *) reply_to, "\"", ""); g_mime_stream_printf (out_stream, "reply_to: \"%s\", ", escaped_reply_to); g_mime_message_get_date (message, &t, &tz); t_m = localtime (&t); strftime(buf, sizeof(buf) - 1, "%c", t_m); g_mime_stream_printf (out_stream, "date: \"%s\", ", buf); strftime(buf, sizeof(buf) - 1, "%Y%m%d%H%M%S", t_m); g_mime_stream_printf (out_stream, "sort_date: \"%s\", ", buf); InternetAddressList *recipients; recipients = g_mime_message_get_recipients(message, GMIME_RECIPIENT_TYPE_TO); g_mime_stream_printf (out_stream, "recipients_to: ["); extract_addresses(recipients, out_stream); g_mime_stream_printf (out_stream, "], "); recipients = g_mime_message_get_recipients(message, GMIME_RECIPIENT_TYPE_CC); g_mime_stream_printf (out_stream, "recipients_cc: ["); extract_addresses(recipients, out_stream); g_mime_stream_printf (out_stream, "], "); recipients = g_mime_message_get_recipients(message, GMIME_RECIPIENT_TYPE_BCC); g_mime_stream_printf (out_stream, "recipients_bcc: ["); extract_addresses(recipients, out_stream); g_mime_stream_printf (out_stream, "] "); }
parsed_article *parse_file(const char *file_name) { static parsed_article pa; GMimeStream *stream; GMimeMessage *msg = NULL; int offset; int file; printf("%s\n", file_name); if ((file = open(file_name, O_RDONLY|O_STREAMING)) == -1) { fprintf(stderr, "Can't open %s\n", file_name); return NULL; } stream = g_mime_stream_fs_new(file); msg = g_mime_parser_construct_message(stream); g_mime_stream_unref(stream); if (msg != 0) { hstrcpy(pa.from, g_mime_message_get_header(msg, "From")); hstrcpy(pa.subject, g_mime_message_get_subject(msg)); hstrcpy(pa.message_id, g_mime_message_get_message_id(msg)); hstrcpy(pa.references, g_mime_message_get_header(msg, "references")); hstrcpy(pa.xref, g_mime_message_get_header(msg, "xref")); hstrcpy(pa.original_message_id, g_mime_message_get_header(msg, "original-message-id")); g_mime_message_get_date(msg, &pa.date, &offset); if (pa.xref != NULL && strstr(pa.xref, "gmane.spam.detected") != NULL) pa.spamp = 1; else pa.spamp = 0; g_mime_message_foreach_part(msg, count_part, (gpointer) &pa); g_mime_object_unref(GMIME_OBJECT(msg)); } close(file); return &pa; }
static gboolean test_message (GMimeMessage *msg) { gchar *val; const gchar *str; g_print ("From : %s\n", g_mime_message_get_sender (msg)); val = get_recip (msg, GMIME_RECIPIENT_TYPE_TO); g_print ("To : %s\n", val ? val : "<none>" ); g_free (val); val = get_recip (msg, GMIME_RECIPIENT_TYPE_CC); g_print ("Cc : %s\n", val ? val : "<none>" ); g_free (val); val = get_recip (msg, GMIME_RECIPIENT_TYPE_BCC); g_print ("Bcc : %s\n", val ? val : "<none>" ); g_free (val); str = g_mime_message_get_subject (msg); g_print ("Subject: %s\n", str ? str : "<none>"); print_date (msg); str = g_mime_message_get_message_id (msg); g_print ("Msg-id : %s\n", str ? str : "<none>"); { gchar *refsstr; refsstr = get_refs_str (msg); g_print ("Refs : %s\n", refsstr ? refsstr : "<none>"); g_free (refsstr); } return TRUE; }
MNMessage * mn_message_new_from_mime_message_full (GType type, MNMailbox *mailbox, GMimeMessage *mime_message, const char *mid, const char *uri, MNMessageFlags flags, gboolean handle_status) { MNMessage *message; const char *id; time_t sent_time; const char *from; const char *subject; char *decoded_from; char *decoded_subject; g_return_val_if_fail(type != 0, NULL); g_return_val_if_fail(MN_IS_MAILBOX(mailbox), NULL); g_return_val_if_fail(GMIME_IS_MESSAGE(mime_message), NULL); if (is_spam(mime_message)) return NULL; if (handle_status) { const char *status; status = g_mime_message_get_header(mime_message, "Status"); if (status && strchr(status, 'R')) return NULL; /* the message was read */ else if (status && strchr(status, 'O')) flags &= ~MN_MESSAGE_NEW; else flags |= MN_MESSAGE_NEW; } id = g_mime_message_get_message_id(mime_message); g_mime_message_get_date(mime_message, &sent_time, NULL); from = g_mime_message_get_sender(mime_message); subject = g_mime_message_get_subject(mime_message); decoded_from = from ? g_mime_utils_header_decode_text(from) : NULL; decoded_subject = subject ? g_mime_utils_header_decode_text(subject) : NULL; message = g_object_new(type, MN_MESSAGE_PROP_MAILBOX(mailbox), MN_MESSAGE_PROP_SENT_TIME(sent_time), MN_MESSAGE_PROP_ID((char *) id), MN_MESSAGE_PROP_MID((char *) mid), MN_MESSAGE_PROP_FROM(decoded_from), MN_MESSAGE_PROP_SUBJECT(decoded_subject), MN_MESSAGE_PROP_URI((char *) uri), MN_MESSAGE_PROP_FLAGS(flags), NULL); g_free(decoded_from); g_free(decoded_subject); return message; }