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;