$msg = mime_get_element ($structure, $msg, $ent_id);
if ($debug_mime) echo "<br>";
}
- return $msg;
if ($debug_mime) echo "<font color=008800><tt> END: mime_parse_structure()</tt></font><br>";
+ return $msg;
}
// Increments the element ID. An element id can look like any of
$str .= htmlspecialchars($d) . "\n";
}
return $str;
-
- return "Body retrival error, please report this bug!\n\nTop line is \"$topline\"\n";
}
function mime_print_body_lines ($imap_stream, $id, $ent_id, $encoding) {
// figures out what entity to display and returns the $message object
// for that entity.
- function findDisplayEntity ($message, $textOnly = 1, $next = 'none')
+ function findDisplayEntity ($message, $textOnly = 1)
{
global $show_html_default;
if (! $message)
return 0;
+ if ($message->header->type0 == "multipart" &&
+ $message->header->type1 == "alternative" &&
+ $show_html_default && ! $textOnly) {
+ $entity = findDisplayEntityHTML($message);
+ if ($entity != 0)
+ return $entity;
+ }
+
// Show text/plain or text/html -- the first one we find.
if ($message->header->type0 == 'text' &&
($message->header->type1 == 'plain' ||
- $message->header->type1 == 'html'))
- {
- // If the next part is an HTML version, this will
- // all be true. Show it, if the user so desires.
- // HTML mails this way all have entity_id of 2. 1 = text/plain
- if ($next != 'none' &&
- $textOnly == 0 &&
- $next->header->type0 == "text" &&
- $next->header->type1 == "html" &&
- ($next->header->entity_id == 2 ||
- $next->header->entity_id == 1.2) &&
- $message->header->type1 == "plain" &&
- isset($show_html_default) &&
- $show_html_default)
- $message = $next;
-
- if (isset($message->header->entity_id))
- return $message->header->entity_id;
- }
- else
- {
- for ($i=0; isset($message->entities[$i]); $i++)
- {
- $next = 'none';
- if (isset($message->entities[$i + 1]))
- $next = $message->entities[$i + 1];
- $entity = findDisplayEntity($message->entities[$i],
- $textOnly, $next);
- if ($entity != 0)
- return $entity;
- }
- }
+ $message->header->type1 == 'html') &&
+ isset($message->header->entity_id))
+ return $message->header->entity_id;
+
+ for ($i=0; isset($message->entities[$i]); $i++) {
+ $entity = findDisplayEntity($message->entities[$i], $textOnly);
+ if ($entity != 0)
+ return $entity;
+ }
+
+ return 0;
+ }
+
+ // Shows the HTML version
+ function findDisplayEntityHTML ($message) {
+ if ($message->header->type0 == 'text' &&
+ $message->header->type1 == 'html' &&
+ isset($message->header->entity_id))
+ return $message->header->entity_id;
+ for ($i = 0; isset($message->entities[$i]); $i ++) {
+ $entity = findDisplayEntityHTML($message->entities[$i]);
+ if ($entity != 0)
+ return $entity;
+ }
return 0;
}
$body = str_replace("\r\n", "\n", $body);
$encoding = strtolower($encoding);
+ global $show_html_default;
+
if ($encoding == "quoted-printable") {
$body = quoted_printable_decode($body);
$body = base64_decode($body);
}
+ if (!$show_html_default) {
+ $body = str_replace('<', '<', $body);
+// $body = str_replace('>', '>', $body);
+// Both this and $body = htmlspecialchars($body); mess up inline
+// quoting :-( Anyway, just replacing < gets the job done.
+ }
+
// All other encodings are returned raw.
return $body;
}
// be encoded.
function encodeHeader ($string) {
global $default_charset;
-
- // Encode only if the string contains 8-bit characters or =?
- if (ereg("([\200-\377]|=\\?)", $string)) {
-
- // First the special characters
- $string = str_replace("=", "=3D", $string);
- $string = str_replace("?", "=3F", $string);
- $string = str_replace("_", "=5F", $string);
- $string = str_replace(" ", "_", $string);
-
- for ( $ch = 127 ; $ch <= 255 ; $ch++ ) {
- $replace = chr($ch);
- $insert = sprintf("=%02X", $ch);
- $string = str_replace($replace, $insert, $string);
- }
-
- $newstring = "=?$default_charset?Q?".$string."?=";
-
- return $newstring;
- }
-
- return $string;
- }
+
+ // Encode only if the string contains 8-bit characters or =?
+ $j = strlen( $string );
+ $l = FALSE; // Must be encoded ?
+ $ret = '';
+ for( $i=0; $i < $j; ++$i) {
+ switch( $string{$i} ) {
+ case '=':
+ $ret .= '=3D';
+ break;
+ case '?':
+ $l = TRUE;
+ $ret .= '=3F';
+ break;
+ case '_':
+ $ret .= '=5F';
+ break;
+ case ' ':
+ $ret .= '_';
+ break;
+ default:
+ $k = ord( $string{$i} );
+ if( $k > 126 ) {
+ $ret .= sprintf("=%02X", $k);
+ $l = TRUE;
+ } else
+ $ret .= $string{$i};
+ }
+ }
+
+ if( $l )
+ $string = "=?$default_charset?Q?$ret?=";
+
+ return( $string );
+ }
?>