X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=functions%2Fmime.php;h=3bae25afc97c7b25fac5f1b746c2161548e2c3b4;hp=da9fb61c4b763d2bbffe667ed3cced7fd3006980;hb=04632dbcbdd2793b533c66df10ba321441d03c2f;hpb=623332f32b08cf1c191ec38db8e349421f9296f8 diff --git a/functions/mime.php b/functions/mime.php index da9fb61c..3bae25af 100644 --- a/functions/mime.php +++ b/functions/mime.php @@ -59,12 +59,18 @@ $id = $header->id; fputs ($imap_stream, "a001 FETCH $id BODYSTRUCTURE\r\n"); $read = fgets ($imap_stream, 10000); - $endline = fgets($imap_stream, 1024); - $read = strtolower($read); + $response = substr($read, 0, 4); + while ($response != "a001") { + $bodystructure = $read; + $read = fgets ($imap_stream, 10000); + $response = substr($read, 0, 4); + } + // $read = strtolower($bodystructure); + $read = $bodystructure; - if ($debug_mime) echo "$read

"; + if ($debug_mime) echo "$read

\n"; // isolate the body structure and remove beginning and end parenthesis - $read = trim(substr ($read, strpos($read, "bodystructure") + 13)); + $read = trim(substr ($read, strpos(strtolower($read), "bodystructure") + 13)); $read = trim(substr ($read, 0, -1)); $end = mime_match_parenthesis(0, $read); while ($end == strlen($read)-1) { @@ -73,7 +79,7 @@ $end = mime_match_parenthesis(0, $read); } - if ($debug_mime) echo "$read

"; + if ($debug_mime) echo "$read

\n"; $msg = mime_parse_structure ($read, 0); $msg->header = $header; @@ -89,7 +95,7 @@ // to mime_get_elements() function mime_parse_structure ($structure, $ent_id) { global $debug_mime; - if ($debug_mime) echo "START: mime_parse_structure()
"; + if ($debug_mime) echo "START: mime_parse_structure()
\n"; $msg = new message(); if (substr($structure, 0, 1) == "(") { $ent_id = mime_new_element_level($ent_id); @@ -155,7 +161,7 @@ $structure = trim($structure); $char = substr($structure, 0, 1); - if (substr($structure, 0, 3) == "nil") { + if (strtolower(substr($structure, 0, 3)) == "nil") { $text = ""; $structure = substr($structure, 3); } else if ($char == "\"") { @@ -190,20 +196,20 @@ // This is where all the text parts get put into the header switch ($elem_num) { case 1: - $msg->header->type0 = $text; - if ($debug_mime) echo "type0 = $text
"; + $msg->header->type0 = strtolower($text); + if ($debug_mime) echo "type0 = ".strtolower($text)."
"; break; case 2: - $msg->header->type1 = $text; - if ($debug_mime) echo "type1 = $text
"; + $msg->header->type1 = strtolower($text); + if ($debug_mime) echo "type1 = ".strtolower($text)."
"; break; case 5: $msg->header->description = $text; if ($debug_mime) echo "description = $text
"; break; case 6: - $msg->header->encoding = $text; - if ($debug_mime) echo "encoding = $text
"; + $msg->header->encoding = strtolower($text); + if ($debug_mime) echo "encoding = ".strtolower($text)."
"; break; case 7: $msg->header->size = $text; @@ -301,7 +307,7 @@ $structure = trim(substr($structure, strlen($tmp) + 2)); $k = count($props); - $props[$k]["name"] = $tmp; + $props[$k]["name"] = strtolower($tmp); $props[$k]["value"] = $value; } else if ($char == "(") { $end = mime_match_parenthesis (0, $structure); @@ -422,7 +428,7 @@ // this if statement checks for the entity to show as the // primary message. To add more of them, just put them in the // order that is their priority. - global $username, $key, $imapServerAddress, $imapPort; + global $startMessage, $username, $key, $imapServerAddress, $imapPort; $id = $message->header->id; $urlmailbox = urlencode($message->header->mailbox); @@ -444,14 +450,16 @@ /** Display the ATTACHMENTS: message if there's more than one part **/ if ($message->entities) { + $body .= ""; $body .= "
"; $body .= "ATTACHMENTS:"; $body .= "
"; $num = 0; - /** make this recurisve at some point **/ $body .= formatAttachments ($message, $ent_num, $message->header->mailbox, $id); $body .= "
"; + } else { + $body .= ""; } return $body; } @@ -459,13 +467,15 @@ // A recursive function that returns a list of attachments with links // to where to download these attachments function formatAttachments ($message, $ent_id, $mailbox, $id) { + global $where, $what; + global $startMessage; if ($message) { if (!$message->entities) { $type0 = strtolower($message->header->type0); $type1 = strtolower($message->header->type1); if ($message->header->entity_id != $ent_id) { - $filename = $message->header->filename; + $filename = decodeHeader($message->header->filename); if (trim($filename) == "") { $display_filename = "untitled-".$message->header->entity_id; } else { @@ -474,10 +484,15 @@ $urlMailbox = urlencode($mailbox); $ent = urlencode($message->header->entity_id); - $body .= "   " . $display_filename . "  (TYPE: $type0/$type1)"; + if ($where && $what) { + // from a search + $body .= "   " . $display_filename . "  (TYPE: $type0/$type1)"; + } else { + $body .= "   " . $display_filename . "  (TYPE: $type0/$type1)"; + } if ($message->header->description) $body .= "  " . htmlspecialchars($message->header->description).""; - $body .= " ("._("download").")\n"; + $body .= " ("._("download").")\n"; $body .= "
"; $num++; } @@ -520,6 +535,11 @@ $replace = base64_decode($res[3]); } else { $replace = ereg_replace("_", " ", $res[3]); + // Convert lowercase Quoted Printable to uppercase for + // quoted_printable_decode to understand it. + while (ereg("(=([0-9][a-f])|([a-f][0-9])|([a-f][0-9]))", $replace, $res)) { + $replace = str_replace($res[1], strtoupper($res[1]), $replace); + } $replace = quoted_printable_decode($replace); }