aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-mime-message.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/camel-mime-message.c')
-rw-r--r--camel/camel-mime-message.c65
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;
+}