diff options
Diffstat (limited to 'camel/camel-mime-message.c')
-rw-r--r-- | camel/camel-mime-message.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/camel/camel-mime-message.c b/camel/camel-mime-message.c index aa15eeec5f..5108670104 100644 --- a/camel/camel-mime-message.c +++ b/camel/camel-mime-message.c @@ -901,3 +901,68 @@ camel_mime_message_get_part_by_content_id (CamelMimeMessage *message, const char return check.part; } + +static char *tz_months[] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" +}; + +static char *tz_days[] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" +}; + +char * +camel_mime_message_build_mbox_from (CamelMimeMessage *message) +{ + struct _header_raw *header = ((CamelMimePart *)message)->headers; + GString *out = g_string_new("From "); + char *ret; + const char *tmp; + time_t thetime; + int offset; + struct tm tm; + + tmp = header_raw_find (&header, "Sender", NULL); + if (tmp == NULL) + tmp = header_raw_find (&header, "From", NULL); + if (tmp != NULL) { + struct _header_address *addr = header_address_decode (tmp, NULL); + + tmp = NULL; + if (addr) { + if (addr->type == HEADER_ADDRESS_NAME) { + g_string_append (out, addr->v.addr); + tmp = ""; + } + header_address_unref (addr); + } + } + + if (tmp == NULL) + g_string_append (out, "unknown@nodomain.now.au"); + + /* try use the received header to get the date */ + tmp = header_raw_find (&header, "Received", NULL); + if (tmp) { + tmp = strrchr(tmp, ';'); + if (tmp) + tmp++; + } + + /* if there isn't one, try the Date field */ + if (tmp == NULL) + tmp = header_raw_find (&header, "Date", NULL); + + thetime = header_decode_date (tmp, &offset); + thetime += ((offset / 100) * (60 * 60)) + (offset % 100) * 60; + gmtime_r (&thetime, &tm); + g_string_append_printf (out, " %s %s %2d %02d:%02d:%02d %4d\n", + tz_days[tm.tm_wday], tz_months[tm.tm_mon], + tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, + tm.tm_year + 1900); + + ret = out->str; + g_string_free (out, FALSE); + + return ret; +} |