-*/
-/* 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";
-
- 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++;
- }