X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=functions%2Fmime.php;h=d19d6e0dcf0344ab13a8880d0552f2ab8787ad7d;hp=a2fd647dfe73a7ed8142e8e82d6d8ef002f0fb89;hb=e976319c39def9b07d04b41b8cf6f1918472bf9e;hpb=e198531f7bd007c53a318970bd1dbe7428a7511c diff --git a/functions/mime.php b/functions/mime.php index a2fd647d..d19d6e0d 100644 --- a/functions/mime.php +++ b/functions/mime.php @@ -50,7 +50,6 @@ class message { */ function mime_structure ($imap_stream, $header) { - sqimap_messages_flag ($imap_stream, $header->id, $header->id, 'Seen'); $ssid = sqimap_session_id(); $lsid = strlen( $ssid ); $id = $header->id; @@ -252,11 +251,11 @@ function mime_get_element (&$structure, $msg, $ent_id) { $text = ""; } // loop through the additional properties and put those in the various headers - if ($msg->header->type0 != 'message') { +// if ($msg->header->type0 != 'message') { for ($i=0; $i < count($properties); $i++) { $msg->header->{$properties[$i]['name']} = $properties[$i]['value']; } - } +// } return $msg; } @@ -383,8 +382,8 @@ function mime_fetch_body($imap_stream, $id, $ent_id ) { $data = sqimap_run_command ($imap_stream, $cmd, true, $response, $message); do { - $topline = array_shift( $data ); - } while( $topline && $topline == '*' && !preg_match( '/\\* [0-9] FETCH.*/i', $topline )) ; + $topline = trim(array_shift( $data )); + } while( $topline && $topline[0] == '*' && !preg_match( '/\* [0-9]+ FETCH.*/i', $topline )) ; $wholemessage = implode('', $data); if (ereg('\\{([^\\}]*)\\}', $topline, $regs)) { @@ -420,7 +419,7 @@ function mime_fetch_body($imap_stream, $id, $ent_id ) { * if ( $base <> '' ) { * $ret = "" . $ret; * } -* */ +* */ } } else if (ereg('"([^"]*)"', $topline, $regs)) { $ret = $regs[1]; @@ -511,7 +510,7 @@ function decodeMime ($imap_stream, &$header) { // This is here for debugging purposese. It will print out a list // of all the entity IDs that are in the $message object. -/* + function listEntities ($message) { if ($message) { if ($message->header->entity_id) @@ -523,7 +522,7 @@ if ($message) { } } } -*/ + /* returns a $message object for a particular entity id */ function getEntity ($message, $ent_id) { @@ -553,12 +552,12 @@ function findDisplayEntity ($message, $textOnly = 1) { if ($message) { if ( $message->header->type0 == 'multipart' && ( $message->header->type1 == 'alternative' || - $message->header->type1 == 'mixed' || + $message->header->type1 == 'mixed' || $message->header->type1 == 'related' ) && $show_html_default && ! $textOnly ) { $entity = findDisplayEntityHTML($message); } - + // Show text/plain or text/html -- the first one we find. if ( $entity == 0 && $message->header->type0 == 'text' && @@ -587,6 +586,11 @@ function findDisplayEntityHTML ($message) { return $message->header->entity_id; } for ($i = 0; isset($message->entities[$i]); $i ++) { + if ( $message->header->type0 == 'message' && + $message->header->type1 == 'rfc822' && + isset($message->header->entity_id)) { + return 0; + } $entity = findDisplayEntityHTML($message->entities[$i]); if ($entity != 0) { return $entity; @@ -609,22 +613,23 @@ function formatBody($imap_stream, $message, $color, $wrap_at) { $show_html_default, $has_unsafe_images, $view_unsafe_images, $sort; $has_unsafe_images = 0; - + $id = $message->header->id; + $urlmailbox = urlencode($message->header->mailbox); - + // Get the right entity and redefine message to be this entity // Pass the 0 to mean that we want the 'best' viewable one $ent_num = findDisplayEntity ($message, 0); $body_message = getEntity($message, $ent_num); + if (($body_message->header->type0 == 'text') || ($body_message->header->type0 == 'rfc822')) { - $body = mime_fetch_body ($imap_stream, $id, $ent_num); $body = decodeBody($body, $body_message->header->encoding); $hookResults = do_hook("message_body", $body); $body = $hookResults[1]; - + // If there are other types that shouldn't be formatted, add // them here if ($body_message->header->type1 == 'html') { @@ -639,13 +644,13 @@ function formatBody($imap_stream, $message, $color, $wrap_at) { } $body .= "
". _("Download this as a file") ."

"; - if ($has_unsafe_images) { - if ($view_unsafe_images) { + if ($has_unsafe_images) { + if ($view_unsafe_images) { $body .= "
". _("Hide Unsafe Images") ."

\n"; } else { $body .= "
". _("View Unsafe Images") ."

\n"; } - } + } /** Display the ATTACHMENTS: message if there's more than one part **/ if (isset($message->entities[0])) { @@ -679,8 +684,81 @@ function formatAttachments($message, $ent_id, $mailbox, $id) { ""; } else if ($message) { + $header = $message->header; + $type0 = strtolower($header->type0); + $type1 = strtolower($header->type1); + $name = decodeHeader($header->name); + + if ($type0 =='message' && $type1 = 'rfc822') { + + $filename = decodeHeader($message->header->filename); + if (trim($filename) == '') { + if (trim($name) == '') { + $display_filename = 'untitled-[' . $message->header->entity_id . ']' ; + } else { + $display_filename = $name; + $filename = $name; + } + } else { + $display_filename = $filename; + } - if (!$message->entities) { + $urlMailbox = urlencode($mailbox); + $ent = urlencode($message->header->entity_id); + + $DefaultLink = + "../src/download.php?startMessage=$startMessage&passed_id=$id&mailbox=$urlMailbox&passed_ent_id=$ent"; + if ($where && $what) { + $DefaultLink .= '&where=' . urlencode($where) . '&what=' . urlencode($what); + } + $Links['download link']['text'] = _("download"); + $Links['download link']['href'] = + "../src/download.php?absolute_dl=true&passed_id=$id&mailbox=$urlMailbox&passed_ent_id=$ent"; + $ImageURL = ''; + + /* this executes the attachment hook with a specific MIME-type. + * if that doens't have results, it tries if there's a rule + * for a more generic type. */ + $HookResults = do_hook("attachment $type0/$type1", $Links, + $startMessage, $id, $urlMailbox, $ent, $DefaultLink, $display_filename, $where, $what); + if(count($HookResults[1]) <= 1) { + $HookResults = do_hook("attachment $type0/*", $Links, + $startMessage, $id, $urlMailbox, $ent, $DefaultLink, + $display_filename, $where, $what); + } + + $Links = $HookResults[1]; + $DefaultLink = $HookResults[6]; + + $body .= '  ' . + "$display_filename " . + '' . show_readable_size($message->header->size) . + '  ' . + "[ $type0/$type1 ] " . + ''; + if ($message->header->description) { + $body .= '' . htmlspecialchars(_($message->header->description)) . ''; + } + $body .= ' '; + + + $SkipSpaces = 1; + foreach ($Links as $Val) { + if ($SkipSpaces) { + $SkipSpaces = 0; + } else { + $body .= '  |  '; + } + $body .= '' . $Val['text'] . ''; + } + + unset($Links); + + $body .= "\n"; + + return( $body ); + + } elseif (!$message->entities) { $type0 = strtolower($message->header->type0); $type1 = strtolower($message->header->type1); @@ -1090,11 +1168,11 @@ function MagicHTML( $body, $id ) { return( "\n\n\n" . $ret . - /* Base is illegal within HTML + /* Base is illegal within HTML "\n\n\n" ); - */ + */ "\n\n\n" ); } @@ -1199,14 +1277,14 @@ function stripEvent( &$i, $j, &$body, $id, $base ) { $src = substr( $src, 4 ); $src = "../src/download.php?absolute_dl=true&passed_id=$id&mailbox=" . urlencode( $message->header->mailbox ) . - "&passed_ent_id=" . find_ent_id( $src, $message ); - } else if ( strtolower( substr( $src, 0, 4 ) ) <> 'http' || + "&passed_ent_id=" . find_ent_id( $src, $message ); + } else if ( strtolower( substr( $src, 0, 4 ) ) <> 'http' || stristr( $src, $base_uri ) ) { /* Javascript and local urls goes out */ - if (!$view_unsafe_images) { + if (!$view_unsafe_images) { $src = '../images/' . _("sec_remove_eng.png"); - } - $has_unsafe_images = 1; + } + $has_unsafe_images = 1; } $ret .= 'src="' . $src . '" '; $i = $k - 2;