X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=functions%2Fmime.php;h=6182250fe3b2421c19e2707238dfcbf97bb72d5d;hp=f89cdfc8a29889c1bad1cc3915949e03c015a531;hb=5c55c29540e62b101fcebdb779daf3309bde2709;hpb=aceb0d5c925965586360e1a9560b09e6173d49d6
diff --git a/functions/mime.php b/functions/mime.php
index f89cdfc..6182250 100644
--- a/functions/mime.php
+++ b/functions/mime.php
@@ -6,6 +6,7 @@
function decodeMime($body, $bound, $type0, $type1) {
+// echo "$type0/$type1
";
if ($type0 == "multipart") {
if ($body[0] == "")
$i = 1;
@@ -20,33 +21,117 @@
$p = 0;
while (substr(trim($body[$j]), 0, strlen($bound)) != $bound) {
- $entity[$p] = $body[$j];
+ $entity_body[$p] = $body[$j];
$j++;
$p++;
}
- fetchEntityHeader($imapConnection, $entity, $ent_type0, $ent_type1, $ent_bound);
- $entity = decodeMime($entity, $ent_bound, $ent_type0, $ent_type1);
+ fetchEntityHeader($imapConnection, $entity_body, $ent_type0, $ent_type1, $ent_bound, &$encoding, &$charset);
+ $entity = getEntity($entity_body, $ent_bound, $ent_type0, $ent_type1, $encoding, $charset);
$q = count($full_message);
- $full_message[$q] = $entity;
+ $full_message[$q] = $entity[0];
}
$i++;
}
- } else if ($type0 == "text") {
- $entity_msg["TYPE0"] = "text";
+ } else {
+ $full_message = getEntity($body, $bound, $type0, $type1);
+ }
+
+ return $full_message;
+ }
+
+ /** This gets one entity's properties **/
+ function getEntity($body, $bound, $type0, $type1, $encoding, $charset) {
+// echo "$type0/$type1
";
+ $msg[0]["TYPE0"] = $type0;
+ $msg[0]["TYPE1"] = $type1;
+ $msg[0]["ENCODING"] = $encoding;
+ $msg[0]["CHARSET"] = $charset;
+
+ if ($type0 == "text") {
if ($type1 == "plain") {
- $entity_msg["TYPE1"] = "plain";
+ $msg[0]["PRIORITY"] = 10;
for ($p = 0;$p < count($body);$p++) {
- $entity_msg["BODY"][$p] = parsePlainTextMessage($body[$p]);
+ $msg[0]["BODY"][$p] = parsePlainTextMessage($body[$p]);
}
-
} else if ($type1 == "html") {
- $entity_msg["TYPE1"] = "html";
- $entity_msg["BODY"] = $body;
+ $msg[0]["PRIORITY"] = 20;
+ $msg[0]["BODY"] = $body;
+ } else {
+ $msg[0]["PRIORITY"] = 1;
+ $msg[0]["BODY"][0] = "This attachment is an unknown text format: $type0/$type1";
}
- $full_message[0] = $entity_msg;
+ } else if ($type0 == "image") {
+ $msg[0]["BODY"][0] = "This is an image. Squirrelmail currently cannot decode images.";
+ } else {
+ $msg[0]["BODY"][0] = "This attachment is of an unknown format: $type0/$type1";
}
- return $full_message;
+ return $msg;
+ }
+
+ function formatBody($message) {
+ for ($i=0; $i < count($message["ENTITIES"]); $i++) {
+ if ($message["ENTITIES"][$i]["TYPE0"] == "text") {
+ if ($message["ENTITIES"][$i]["PRIORITY"] > $priority)
+ $priority = $message["ENTITIES"][$i]["PRIORITY"];
+ }
+ }
+
+ for ($i = 0; $i < count($message["ENTITIES"]); $i++) {
+ switch ($priority) {
+ /** HTML **/
+ case 20: for ($i=0; $i < count($message["ENTITIES"]); $i++) {
+ if (($message["ENTITIES"][$i]["TYPE0"] == "text") && ($message["ENTITIES"][$i]["TYPE1"] == "html")) {
+ $body = decodeBody($message["ENTITIES"][$i]["BODY"], $message["ENTITIES"][$i]["ENCODING"]);
+ }
+ }
+ break;
+ /** PLAIN **/
+ case 10: for ($i=0; $i < count($message["ENTITIES"]); $i++) {
+ if (($message["ENTITIES"][$i]["TYPE0"] == "text") && ($message["ENTITIES"][$i]["TYPE1"] == "plain")) {
+ $body = decodeBody($message["ENTITIES"][$i]["BODY"], $message["ENTITIES"][$i]["ENCODING"]);
+ }
+ }
+ break;
+ /** UNKNOWN...SEND WHAT WE GOT **/
+ case 1: for ($i=0; $i < count($message["ENTITIES"]); $i++) {
+ if (($message["ENTITIES"][$i]["TYPE0"] == "text")) {
+ $pos = count($body);
+ for ($b=0; $b < count($message["ENTITIES"][$i]["BODY"]); $b++) {
+ $pos = $pos + $b;
+ $body[$pos] = $message["ENTITIES"][$i]["BODY"][$b];
+ }
+ }
+ }
+ break;
+ }
+ }
+ return $body;
+ }
+
+ function decodeBody($body, $encoding) {
+ $encoding = strtolower($encoding);
+ if ($encoding == "us-ascii") {
+ $newbody = $body; // if only they all were this easy
+ } else if ($encoding == "quoted-printable") {
+ for ($q=0; $q < count($body); $q++) {
+ if (substr(trim($body[$q]), -1) == "=") {
+ $body[$q] = trim($body[$q]);
+ $body[$q] = substr($body[$q], 0, strlen($body[$q])-1);
+ } else if (substr(trim($body[$q]), -3) == "=20") {
+ $body[$q] = trim($body[$q]);
+ $body[$q] = substr($body[$q], 0, strlen($body[$q])-3);
+ $body[$q] = "$body[$q]\n"; // maybe should be \n.. dunno
+ }
+ }
+ for ($q=0;$q < count($body);$q++) {
+ $body[$q] = ereg_replace("=3D", "=", $body[$q]);
+ }
+ $newbody = $body;
+ } else {
+ $newbody = $body;
+ }
+ return $newbody;
}
?>
\ No newline at end of file