On Tuesday, September 25 at 06:26 PM, quoth Timo Sirainen:
That's not *quite* what I meant. ARRIVAL is "when did this mail get here", while DATE is supposed to be "when was this mail sent". My thought here is that "when was this mail sent" can be approximated in the absence of a Date header by checking the earliest timestamp in the Received headers.

So, something like:

const char *const *headers = mail_get_headers(mail, "Received");
if (headers != NULL && headers[0] != NULL) {
 while (headers[1] != NULL) headers++;
 // do your Received header parsing magic for headers[0]
}

Aha! That's perfect! (and so simple!)

If anyone in the future is interested in the code for this, here's what I did that works for me. This goes in all three places that mail_get_date() is used in the code:

t = mail_get_date(mail, NULL);
if (t == (time_t)-1 || t == 0) {
    const char *const *headers = mail_get_headers(mail, "Received");
    if (headers != NULL && headers[0] != NULL) {
        while (headers[1] != NULL) headers++; // find the last one
        /* find the semicolon */
        const char * curs = headers[0];
        while (curs[0] != ';' && curs[0] != 0) {
            if (curs[0] == '(')
                while (curs[0] != ')' && curs[0] != 0) curs++;
            curs++;
        if (curs[0] == ';') {
            curs++;
            if (curs[0] != 0) {
                int tz;
                message_date_parse((const unsigned char *)curs,
                        strlen(curs), &t, &tz);
            }
        }
    }
}

Thanks, Timo!

~Kyle
--
Coffee is the common man's gold, and like gold, it brings to every person the feeling of luxury and nobility.
                                                 -- Sheik Abd-al-Kadir

Attachment: pgpkFPmJBJonl.pgp
Description: PGP signature

Reply via email to