X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fmime.php;h=1419d58854dd7a859d3140abc07a842c07a9886a;hb=da1b55add6a9207dfd72e141e2fe4ec74cf26e3e;hp=61ee7357139860568ce2628c0a83ac0f4e20c7e9;hpb=6ab1bd9e63bd717eef40fcd9b39439c368a546eb;p=squirrelmail.git
diff --git a/functions/mime.php b/functions/mime.php
index 61ee7357..989018ae 100644
--- a/functions/mime.php
+++ b/functions/mime.php
@@ -1,1253 +1,2200 @@
entities[] = $msg;
- }
-}
+* mime.php
+*
+* Copyright (c) 1999-2005 The SquirrelMail Project Team
+* Licensed under the GNU GPL. For full terms see the file COPYING.
+*
+* This contains the functions necessary to detect and decode MIME
+* messages.
+*
+* @version $Id$
+* @package squirrelmail
+*/
-/* --------------------------------------------------------------------------------- */
-/* MIME DECODING */
-/* --------------------------------------------------------------------------------- */
+/** The typical includes... */
+require_once(SM_PATH . 'functions/imap.php');
+require_once(SM_PATH . 'functions/attachment_common.php');
-/* This function gets the structure of a message and stores it in the "message" class.
- * It will return this object for use with all relevant header information and
- * fully parsed into the standard "message" object format.
- */
-function mime_structure ($imap_stream, $header) {
+/* -------------------------------------------------------------------------- */
+/* MIME DECODING */
+/* -------------------------------------------------------------------------- */
- sqimap_messages_flag ($imap_stream, $header->id, $header->id, 'Seen');
- $ssid = sqimap_session_id();
- $lsid = strlen( $ssid );
- $id = $header->id;
- fputs ($imap_stream, "$ssid FETCH $id BODYSTRUCTURE\r\n");
- //
- // This should use sqimap_read_data instead of reading it itself
- //
- $read = fgets ($imap_stream, 9216);
- $bodystructure = '';
- while ( substr($read, 0, $lsid) <> $ssid &&
- !feof( $imap_stream ) ) {
- $bodystructure .= $read;
- $read = fgets ($imap_stream, 9216);
- }
- $read = $bodystructure;
+/**
+* Get the MIME structure
+*
+* This function gets the structure of a message and stores it in the "message" class.
+* It will return this object for use with all relevant header information and
+* fully parsed into the standard "message" object format.
+*/
+function mime_structure ($bodystructure, $flags=array()) {
- // isolate the body structure and remove beginning and end parenthesis
- $read = trim(substr ($read, strpos(strtolower($read), 'bodystructure') + 13));
+ /* Isolate the body structure and remove beginning and end parenthesis. */
+ $read = trim(substr ($bodystructure, strpos(strtolower($bodystructure), 'bodystructure') + 13));
$read = trim(substr ($read, 0, -1));
- $end = mime_match_parenthesis(0, $read);
- while ($end == strlen($read)-1) {
- $read = trim(substr ($read, 0, -1));
- $read = trim(substr ($read, 1));
- $end = mime_match_parenthesis(0, $read);
- }
-
- $msg = mime_parse_structure ($read, 0);
- $msg->header = $header;
-
- return( $msg );
-}
-
-/* this starts the parsing of a particular structure. It is called recursively,
- * so it can be passed different structures. It returns an object of type
- * $message.
- * First, it checks to see if it is a multipart message. If it is, then it
- * handles that as it sees is necessary. If it is just a regular entity,
- * then it parses it and adds the necessary header information (by calling out
- * to mime_get_elements()
- */
-function mime_parse_structure ($structure, $ent_id) {
-
- $msg = new message();
- if ($structure{0} == '(') {
- $ent_id = mime_new_element_level($ent_id);
- $start = $end = -1;
- do {
- $start = $end+1;
- $end = mime_match_parenthesis ($start, $structure);
-
- $element = substr($structure, $start+1, ($end - $start)-1);
- $ent_id = mime_increment_id ($ent_id);
- $newmsg = mime_parse_structure ($element, $ent_id);
- $msg->addEntity ($newmsg);
- } while ($structure{$end+1} == '(');
- } else {
- // parse the elements
- $msg = mime_get_element ($structure, $msg, $ent_id);
- }
- return $msg;
-}
-
-/* Increments the element ID. An element id can look like any of
- * the following: 1, 1.2, 4.3.2.4.1, etc. This function increments
- * the last number of the element id, changing 1.2 to 1.3.
- */
-function mime_increment_id ($id) {
-
- if (strpos($id, '.')) {
- $first = substr($id, 0, strrpos($id, '.'));
- $last = substr($id, strrpos($id, '.')+1);
- $last++;
- $new = $first . '.' .$last;
- } else {
- $new = $id + 1;
- }
-
- return $new;
-}
-
-/*
- * See comment for mime_increment_id().
- * This adds another level on to the entity_id changing 1.3 to 1.3.0
- * NOTE: 1.3.0 is not a valid element ID. It MUST be incremented
- * before it can be used. I left it this way so as not to have
- * to make a special case if it is the first entity_id. It
- * always increments it, and that works fine.
- */
-function mime_new_element_level ($id) {
-
- if (!$id) {
- $id = 0;
- } else {
- $id = $id . '.0';
+ $i = 0;
+ $msg = Message::parseStructure($read,$i);
+ if (!is_object($msg)) {
+ include_once(SM_PATH . 'functions/display_messages.php');
+ global $color, $mailbox;
+ /* removed urldecode because $_GET is auto urldecoded ??? */
+ displayPageHeader( $color, $mailbox );
+ $errormessage = _("SquirrelMail could not decode the bodystructure of the message");
+ $errormessage .= '
'._("the provided bodystructure by your imap-server").':
';
+ $errormessage .= '
' . htmlspecialchars($read) . ''; + plain_error_message( $errormessage, $color ); + echo '