-*/
-/* Queries the IMAP server and gets all header information. */
-function sqimap_get_header ($imap_stream, $read) {
- global $where, $what;
-
- $hdr = new msg_header();
- $i = 0;
-
- /* Set up some defaults */
- $hdr->type0 = "text";
- $hdr->type1 = "plain";
- $hdr->charset = "us-ascii";
-
- $read_fold = array();
-
- while ($i < count($read)) {
- /* unfold multi-line headers */
- /* remember line for to, cc and bcc */
- $read_fold[] = $read[$i];
- $folded = false;
- while (($i + 1 < count($read)) && (strspn($read[$i + 1], "\t ") > 0) ) {
- if ($read[$i+1] != '') $read_fold[] = $read[$i+1];
- $read[$i + 1] = substr($read[$i], 0, -2) . ' ' . ltrim($read[$i+1]);
- array_splice($read, $i, 1);
- $folded = true;
- }
- if (!$folded) {
- $read_fold = array();
- }
-
- 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;
- if (isset($read_fold[0])) {
- $hdr->cc[$pos] = trim(substr($read_fold[0], 4));
- $pos++;
- while ($pos < count($read_fold)) {
- $hdr->cc[$pos] = trim($read_fold[$pos]);
- $pos++;
- }
- } else {
- $hdr->cc[$pos] = trim(substr($read[$i], 4));
- }
- $i++;
- }
- /* BCC */
- else if (strtolower(substr($read[$i], 0, 4)) == "bcc:") {
- $pos = 0;
- if (isset($read_fold[0])) {
- $hdr->bcc[$pos] = trim(substr($read_fold[0], 5));
- $pos++;
- while ($pos < count($read_fold)) {
- $hdr->bcc[$pos] = trim($read_fold[$pos]);
- $pos++;
- }
- } else {
- $hdr->bcc[$pos] = trim(substr($read[$i], 5));
- }
- $i++;
- }
- /* TO */
- else if (strtolower(substr($read[$i], 0, 3)) == "to:") {
- $pos = 0;
- if (isset($read_fold[0])) {
- $hdr->to[$pos] = trim(substr($read_fold[0], 4));
- $pos++;
- while ($pos < count($read_fold)) {
- $hdr->to[$pos] = trim($read_fold[$pos]);
- $pos++;
- }
- } else {
- $hdr->to[$pos] = trim(substr($read[$i], 4));
- }
- $i++;
-
- }
- /* MESSAGE ID */
- else if (strtolower(substr($read[$i], 0, 11)) == "message-id:") {
- $hdr->message_id = trim(substr($read[$i], 11));
- $i++;
- }
- /* ERROR CORRECTION */
- else if (substr($read[$i], 0, 1) == ")") {
- if (strlen(trim($hdr->subject)) == 0) {
- $hdr->subject = _("(no subject)");
- }
- if (strlen(trim($hdr->from)) == 0) {
- $hdr->from = _("(unknown sender)");
- }
- if (strlen(trim($hdr->date)) == 0) {
- $hdr->date = time();
- }
- $i++;
- }
- /* X-PRIORITY */
- else if (strtolower(substr($read[$i], 0, 11)) == "x-priority:") {
- $hdr->priority = trim(substr($read[$i], 11));
- $i++;
- }
- else {
- $i++;
- }
- $read_fold=array();
- }
- return $hdr;
-}
-
-/* Returns the body of a message. */
-function sqimap_get_message_body ($imap_stream, &$header) {
- $id = $header->id;
- return decodeMime($imap_stream, $header);
-}
-