- while ($i < count($read)) {
- //unfold multi-line headers
- while ($i + 1 < count($read) && strspn($read[$i + 1], "\t ") > 0) {
- $read[$i + 1] = substr($read[$i], 0, -2) . ' ' . ltrim($read[$i + 1]);
- array_splice($read, $i, 1);
- }
-
- if (substr($read[$i], 0, 17) == "MIME-Version: 1.0") {
- $hdr->mime = true;
- $i++;
- }
- /* ENCODING TYPE */
- else if (substr(strtolower($read[$i]), 0, 26) == "content-transfer-encoding:") {
- $hdr->encoding = strtolower(trim(substr($read[$i], 26)));
- $i++;
- }
- /* CONTENT-TYPE */
- else if (strtolower(substr($read[$i], 0, 13)) == "content-type:") {
- $cont = strtolower(trim(substr($read[$i], 13)));
- if (strpos($cont, ";")) {
- $cont = substr($cont, 0, strpos($cont, ";"));
- }
-
- if (strpos($cont, "/")) {
- $hdr->type0 = substr($cont, 0, strpos($cont, "/"));
- $hdr->type1 = substr($cont, strpos($cont, "/")+1);
- } else {
- $hdr->type0 = $cont;
- }
-
- $line = $read[$i];
- $i++;
- while ( (substr(substr($read[$i], 0, strpos($read[$i], " ")), -1) != ":") && (trim($read[$i]) != "") && (trim($read[$i]) != ")")) {
- str_replace("\n", "", $line);
- str_replace("\n", "", $read[$i]);
- $line = "$line $read[$i]";
- $i++;
- }
-
- /* Detect the boundary of a multipart message */
- if (eregi('boundary="([^"]+)"', $line, $regs)) {
- $hdr->boundary = $regs[1];
- }
-
- /* Detect the charset */
- if (strpos(strtolower(trim($line)), "charset=")) {
- $pos = strpos($line, "charset=") + 8;
- $charset = trim($line);
- if (strpos($line, ";", $pos) > 0) {
- $charset = substr($charset, $pos, strpos($line, ";", $pos)-$pos);
- } else {
- $charset = substr($charset, $pos);
- }
- $charset = str_replace("\"", "", $charset);
- $hdr->charset = $charset;
- } else {
- $hdr->charset = "us-ascii";
- }
- /* Detect type in case of multipart/related */
- if (strpos(strtolower(trim($line)), "type=")) {
- $pos = strpos($line, "type=") + 6;
- $type = trim($line);
- if (strpos($line, ";", $pos) > 0) {
- $type = substr($type, $pos, strpos($line, ";", $pos)-$pos);
- } else {
- $type = substr($type, $pos);
- }
- $hdr->type = $type;
- }
- }
- else if (strtolower(substr($read[$i], 0, 20)) == "content-disposition:") {
- /* Add better content-disposition support */
- $line = $read[$i];
- $i++;
- while ( (substr(substr($read[$i], 0, strpos($read[$i], " ")), -1) != ":") && (trim($read[$i]) != "") && (trim($read[$i]) != ")")) {
- str_replace("\n", "", $line);
- str_replace("\n", "", $read[$i]);
- $line = "$line $read[$i]";
- $i++;
- }
-
- /* Detects filename if any */
- if (strpos(strtolower(trim($line)), "filename=")) {
- $pos = strpos($line, "filename=") + 9;
- $name = trim($line);
- if (strpos($line, " ", $pos) > 0) {
- $name = substr($name, $pos, strpos($line, " ", $pos));
- } else {
- $name = substr($name, $pos);
- }
- $name = str_replace("\"", "", $name);
- $hdr->filename = $name;
- }
- }
- /* REPLY-TO */
- else if (strtolower(substr($read[$i], 0, 9)) == "reply-to:") {
- $hdr->replyto = trim(substr($read[$i], 9, strlen($read[$i])));
- $i++;
- }
- /* FROM */
- else if (strtolower(substr($read[$i], 0, 5)) == "from:") {
- $hdr->from = trim(substr($read[$i], 5, strlen($read[$i]) - 6));
- if (! isset($hdr->replyto) || $hdr->replyto == "") {
- $hdr->replyto = $hdr->from;
- }
- $i++;
- }
- /* DATE */
- else if (strtolower(substr($read[$i], 0, 5)) == "date:") {
- $d = substr($read[$i], 5);
- $d = trim($d);
- $d = strtr($d, array(' ' => ' '));
- $d = explode(' ', $d);
- $hdr->date = getTimeStamp($d);
- $i++;
- }
- /* SUBJECT */
- else if (strtolower(substr($read[$i], 0, 8)) == "subject:") {
- $hdr->subject = trim(substr($read[$i], 8, strlen($read[$i]) - 9));
- if (strlen(Chop($hdr->subject)) == 0) {
- $hdr->subject = _("(no subject)");
- }
- /*
- if ($where == 'SUBJECT') {
- $hdr->subject = $what;
- // $hdr->subject = eregi_replace($what, "<b>\\0</b>", $hdr->subject);
- }
- */
- $i++;
- }
- /* CC */
- else if (strtolower(substr($read[$i], 0, 3)) == "cc:") {
- $pos = 0;
- $hdr->cc[$pos] = trim(substr($read[$i], 4));
- $i++;
- while (((substr($read[$i], 0, 1) == " ") || (substr($read[$i], 0, 1) == "\t")) && (trim($read[$i]) != "")){
- $pos++;
- $hdr->cc[$pos] = trim($read[$i]);
- $i++;