# HG changeset patch # User Carl Byington # Date 1306095395 25200 # Node ID e02c81c392325f787899df636a2272b70c2c84b4 # Parent ebcfb23390a43ad3872f20800d540c969f7667f3 add some debug code diff -r ebcfb23390a4 -r e02c81c39232 src/readpst.c --- a/src/readpst.c Sun May 22 12:16:27 2011 -0700 +++ b/src/readpst.c Sun May 22 13:16:35 2011 -0700 @@ -1360,9 +1360,18 @@ pst_convert_utf8_null(item, &item->email->header); headers = (item->email->header.str) ? item->email->header.str : *extra_mime_headers; if (*extra_mime_headers && item->email->header.str) { - // we have both extra mime headers from outer message, - // and also our own set of headers - DEBUG_INFO(("Double headers! outer set = \n%s\n\nDouble headers! inner set = \n%s\n", *extra_mime_headers, item->email->header.str)); + // we have both extra mime headers from the outer message, and also our own set of headers + // normally we would use the headers on our current (inner) message, but those + // headers are sometimes really bogus - they seem to be fragments of the message body. So + // we only use them if they seem to be actual smtp rfc822 headers. + if ((strncasecmp(headers, "Return-Path: ") == 0) || + (strncasecmp(headers, "Received: ") == 0) || + (strncasecmp(headers, "From: ") == 0)) { + } + else { + DEBUG_INFO(("Ignore bogus inner headers = \n%s\n", headers)); + headers = *extra_mime_headers; + } } // setup default body character set and report type @@ -1409,7 +1418,8 @@ temp[1] = '\0'; // pointer to all the embedded MIME headers. // we use these to find the actual rfc822 headers for embedded message/rfc822 mime parts - *extra_mime_headers = temp+2; + // but only for the outermost message + if (!*extra_mime_headers) *extra_mime_headers = temp+2; DEBUG_INFO(("Found extra mime headers\n%s\n", temp+2)); }