Detect text/html parts that were marked as text/plain and re-tag them as
2002-12-16 Jeffrey Stedfast <fejj@ximian.com> * camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser): Detect text/html parts that were marked as text/plain and re-tag them as text/html parts. Note: currently just checks if the first non-lwsp char is a '<' - but we might need to be smarter about this? *sigh* Stupid Windows mailers. svn path=/trunk/; revision=19143
This commit is contained in:

committed by
Jeffrey Stedfast

parent
b6a3b64021
commit
7d7d2b7729
@ -1,5 +1,12 @@
|
||||
2002-12-16 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* camel-mime-part-utils.c
|
||||
(simple_data_wrapper_construct_from_parser): Detect text/html
|
||||
parts that were marked as text/plain and re-tag them as text/html
|
||||
parts. Note: currently just checks if the first non-lwsp char is a
|
||||
'<' - but we might need to be smarter about this? *sigh* Stupid
|
||||
Windows mailers.
|
||||
|
||||
* camel-mime-filter-tohtml.c (camel_text_to_html): New convenience
|
||||
function to replace calls to e_text_to_html() in the
|
||||
mailer/composer etc.
|
||||
|
@ -231,8 +231,8 @@ simple_data_wrapper_construct_from_parser (CamelDataWrapper *dw, CamelMimeParser
|
||||
int len, decid = -1, crlfid = -1;
|
||||
struct _header_content_type *ct;
|
||||
const char *charset = NULL;
|
||||
GByteArray *buffer;
|
||||
char *encoding, *buf;
|
||||
GByteArray *buffer;
|
||||
CamelStream *mem;
|
||||
|
||||
d(printf ("simple_data_wrapper_construct_from_parser()\n"));
|
||||
@ -259,29 +259,47 @@ simple_data_wrapper_construct_from_parser (CamelDataWrapper *dw, CamelMimeParser
|
||||
}
|
||||
|
||||
/* If we're doing text, we also need to do CRLF->LF and may have to convert it to UTF8 as well. */
|
||||
ct = camel_mime_parser_content_type(mp);
|
||||
if (header_content_type_is(ct, "text", "*")) {
|
||||
charset = header_content_type_param(ct, "charset");
|
||||
charset = e_iconv_charset_name(charset);
|
||||
ct = camel_mime_parser_content_type (mp);
|
||||
if (header_content_type_is (ct, "text", "*")) {
|
||||
charset = header_content_type_param (ct, "charset");
|
||||
charset = e_iconv_charset_name (charset);
|
||||
|
||||
if (fdec) {
|
||||
d(printf("Adding CRLF conversion filter\n"));
|
||||
fcrlf = (CamelMimeFilter *)camel_mime_filter_crlf_new(CAMEL_MIME_FILTER_CRLF_DECODE,
|
||||
CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
|
||||
crlfid = camel_mime_parser_filter_add(mp, fcrlf);
|
||||
d(printf ("Adding CRLF conversion filter\n"));
|
||||
fcrlf = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_DECODE,
|
||||
CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
|
||||
crlfid = camel_mime_parser_filter_add (mp, fcrlf);
|
||||
}
|
||||
}
|
||||
|
||||
/* read in the entire content */
|
||||
buffer = g_byte_array_new();
|
||||
while (camel_mime_parser_step(mp, &buf, &len) != HSCAN_BODY_END) {
|
||||
buffer = g_byte_array_new ();
|
||||
while (camel_mime_parser_step (mp, &buf, &len) != HSCAN_BODY_END) {
|
||||
d(printf("appending o/p data: %d: %.*s\n", len, len, buf));
|
||||
g_byte_array_append(buffer, buf, len);
|
||||
g_byte_array_append (buffer, buf, len);
|
||||
}
|
||||
|
||||
|
||||
/* check for broken Outlook/Web mailers that like to send html marked as text/plain */
|
||||
if (header_content_type_is (ct, "text", "plain")) {
|
||||
register const unsigned char *inptr;
|
||||
const unsigned char *inend;
|
||||
|
||||
inptr = buffer->data;
|
||||
inend = inptr + buffer->len;
|
||||
|
||||
while (inptr < inend && isspace ((int) *inptr))
|
||||
inptr++;
|
||||
|
||||
if (inptr < inend && *inptr == '<') {
|
||||
/* re-tag as text/html */
|
||||
g_free (ct->subtype);
|
||||
ct->subtype = g_strdup ("html");
|
||||
}
|
||||
}
|
||||
|
||||
/* Possible Lame Mailer Alert... check the META tags for a charset */
|
||||
if (!charset && header_content_type_is (ct, "text", "html"))
|
||||
charset = check_html_charset(buffer->data, buffer->len);
|
||||
charset = check_html_charset (buffer->data, buffer->len);
|
||||
|
||||
/* if we need to do charset conversion, see if we can/it works/etc */
|
||||
if (charset && !(strcasecmp (charset, "us-ascii") == 0
|
||||
|
Reference in New Issue
Block a user