From 052e0c2614e1f9f0fbdab8738dfa07aed6081952 Mon Sep 17 00:00:00 2001 From: lkehresman Date: Mon, 10 Apr 2000 15:33:00 +0000 Subject: [PATCH] added these, changed permissions git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@398 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/imap_general.php | 249 +++++++++++++++++++++++++++++ functions/imap_mailbox.php | 263 ++++++++++++++++++++++++++++++ functions/imap_messages.php | 307 ++++++++++++++++++++++++++++++++++++ 3 files changed, 819 insertions(+) create mode 100755 functions/imap_general.php create mode 100755 functions/imap_mailbox.php create mode 100755 functions/imap_messages.php diff --git a/functions/imap_general.php b/functions/imap_general.php new file mode 100755 index 00000000..9d963825 --- /dev/null +++ b/functions/imap_general.php @@ -0,0 +1,249 @@ +"; + echo _("ERROR : Could not complete request."); + echo "
"; + echo _("Reason Given: "); + echo "$message

"; + exit; + } else if ($response == "BAD") { + echo "
"; + echo _("ERROR : Bad or malformed request."); + echo "
"; + echo _("Server responded: "); + echo "$message

"; + exit; + } + } + + return $data; + } + + + + + /****************************************************************************** + ** Logs the user into the imap server. If $hide is set, no error messages + ** will be displayed. This function returns the imap connection handle. + ******************************************************************************/ + function sqimap_login ($username, $password, $imap_server_address, $imap_port, $hide) { + global $color; + global $PHPSESSID; + $imap_stream = fsockopen ($imap_server_address, $imap_port, &$error_number, &$error_string); + $server_info = fgets ($imap_stream, 1024); + + /** Do some error correction **/ + if (!$imap_stream) { + if (!$hide) { + echo "Error connecting to IMAP server: $imap_server_address.
\r\n"; + echo "$error_number : $error_string
\r\n"; + } + exit; + } + + fputs ($imap_stream, "a001 LOGIN \"$username\" \"$password\"\r\n"); + $read = fgets ($imap_stream, 1024); + + /** If the connection was not successful, lets see why **/ + if (substr($read, 0, 7) != "a001 OK") { + if (!$hide) { + if (substr($read, 0, 8) == "a001 BAD") { + echo "Bad request: $read
\r\n"; + exit; + } else if (substr($read, 0, 7) == "a001 NO") { + ?> + + +
+
+ + + + + + + +
+ +
+ +
+
+
+
+
+ +
+
+
+ + + "; + exit; + } + } else { + exit; + } + } + + return $imap_stream; + } + + + + + /****************************************************************************** + ** Simply logs out the imap session + ******************************************************************************/ + function sqimap_logout ($imap_stream) { + fputs ($imap_stream, "a001 LOGOUT\r\n"); + } + + + + /****************************************************************************** + ** Returns the delimeter between mailboxes: INBOX/Test, or INBOX.Test... + ******************************************************************************/ + function sqimap_get_delimiter ($imap_stream) { + fputs ($imap_stream, ". LSUB \"\" *\r\n"); + $read = sqimap_read_data($imap_stream, ".", true, $a, $b); + $quote_position = strpos ($read[0], "\""); + $delim = substr ($read[0], $quote_position+1, 1); + + return $delim; + } + + + + + /****************************************************************************** + ** Gets the number of messages in the current mailbox. + ******************************************************************************/ + function sqimap_get_num_messages ($imap_stream, $mailbox) { + fputs ($imap_stream, "a001 EXAMINE \"$mailbox\"\r\n"); + $read_ary = sqimap_read_data ($imap_stream, "a001", true, $result, $message); + for ($i = 0; $i < count($read_ary); $i++) { + if (substr(trim($read_ary[$i]), -6) == EXISTS) { + $array = explode (" ", $read_ary[$i]); + $num = $array[1]; + } + } + return $num; + } + + + /****************************************************************************** + ** Returns a displayable email address + ******************************************************************************/ + function sqimap_find_email ($string) { + /** Luke Ehresman + ** + ** lehresma@css.tayloru.edu + **/ + + if (strpos($string, "<") && strpos($string, ">")) { + $string = substr($string, strpos($string, "<")+1); + $string = substr($string, 0, strpos($string, ">")); + } + return trim($string); + } + + + /****************************************************************************** + ** Takes the From: field, and creates a displayable name. + ** Luke Ehresman + ** becomes: Luke Ehresman + ** + ** becomes: lkehresman@yahoo.com + ******************************************************************************/ + function sqimap_find_displayable_name ($string) { + $string = " ".trim($string); + if (strpos($string, "<") && strpos($string, ">")) { + if (strpos($string, "<") == 1) { + $string = sqimap_find_email($string); + } else { + $string = trim($string); + $string = substr($string, 0, strpos($string, "<")); + $string = ereg_replace ("\"", "", $string); + } + } + return $string; + } + + + + /****************************************************************************** + ** Returns the number of unseen messages in this folder + ******************************************************************************/ + function sqimap_unseen_messages ($imap_stream, &$num_unseen) { + fputs ($imap_stream, "a001 SEARCH UNSEEN NOT DELETED\r\n"); + $read_ary = sqimap_read_data ($imap_stream, "a001", true, $result, $message); + $unseen = false; + + if (strlen($read_ary[0]) > 10) { + $unseen = true; + $ary = explode (" ", $read_ary[0]); + $num_unseen = count($ary) - 2; + } else { + $unseen = false; + $num_unseen = 0; + } + + return $unseen; + } + + + /****************************************************************************** + ** Saves a message to a given folder -- used for saving sent messages + ******************************************************************************/ + function sqimap_append ($imap_stream, $sent_folder, $length) { + fputs ($imap_stream, "a001 APPEND \"$sent_folder\" (\\Seen) \{$length}\r\n"); + $tmp = fgets ($imap_stream, 1024); + } + + function sqimap_append_done ($imap_stream) { + fputs ($imap_stream, "\r\n"); + $tmp = fgets ($imap_stream, 1024); + } +?> diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php new file mode 100755 index 00000000..b9f461c9 --- /dev/null +++ b/functions/imap_mailbox.php @@ -0,0 +1,263 @@ + diff --git a/functions/imap_messages.php b/functions/imap_messages.php new file mode 100755 index 00000000..fe3255fa --- /dev/null +++ b/functions/imap_messages.php @@ -0,0 +1,307 @@ + 0) { + $charset = substr($charset, $pos, strpos($line, " ", $pos)); + } else { + $charset = substr($charset, $pos); + } + $charset = str_replace("\"", "", $charset); + $header["CHARSET"] = $charset; + } else { + $header["CHARSET"] = "us-ascii"; + } + + } + + else if (strtolower(substr($read[$i], 0, 20)) == "content-disposition:") { + /** Add better dontent-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); + $header["FILENAME"] = $name; + } + } + + /** REPLY-TO **/ + else if (strtolower(substr($read[$i], 0, 9)) == "reply-to:") { + $header["REPLYTO"] = trim(substr($read[$i], 9, strlen($read[$i]))); + $i++; + } + + /** FROM **/ + else if (strtolower(substr($read[$i], 0, 5)) == "from:") { + $header["FROM"] = trim(substr($read[$i], 5, strlen($read[$i]) - 6)); + if ($header["REPLYTO"] == "") + $header["REPLYTO"] = $header["FROM"]; + $i++; + } + /** DATE **/ + else if (strtolower(substr($read[$i], 0, 5)) == "date:") { + $d = substr($read[$i], 5); + $d = trim($d); + $d = ereg_replace(" ", " ", $d); + $d = explode(" ", $d); + $header["DATE"] = getTimeStamp($d); + $i++; + } + /** SUBJECT **/ + else if (strtolower(substr($read[$i], 0, 8)) == "subject:") { + $header["SUBJECT"] = trim(substr($read[$i], 8, strlen($read[$i]) - 9)); + if (strlen(Chop($header["SUBJECT"])) == 0) + $header["SUBJECT"] = _("(no subject)"); + $i++; + } + /** CC **/ + else if (strtolower(substr($read[$i], 0, 3)) == "cc:") { + $pos = 0; + $header["CC"][$pos] = trim(substr($read[$i], 4)); + $i++; + while ((substr($read[$i], 0, 1) == " ") && (trim($read[$i]) != "")) { + $pos++; + $header["CC"][$pos] = trim($read[$i]); + $i++; + } + } + /** TO **/ + else if (strtolower(substr($read[$i], 0, 3)) == "to:") { + $pos = 0; + $header["TO"][$pos] = trim(substr($read[$i], 4)); + $i++; + while ((substr($read[$i], 0, 1) == " ") && (trim($read[$i]) != "")){ + $pos++; + $header["TO"][$pos] = trim($read[$i]); + $i++; + } + } + /** MESSAGE ID **/ + else if (strtolower(substr($read[$i], 0, 11)) == "message-id:") { + $header["MESSAGE-ID"] = trim(substr($read[$i], 11)); + $i++; + } + + + /** ERROR CORRECTION **/ + else if (substr($read[$i], 0, 1) == ")") { + if ($header["SUBJECT"] == "") + $header["SUBJECT"] = _("(no subject)"); + + if ($header["FROM"] == "") + $header["FROM"] = _("(unknown sender)"); + + if ($header["DATE"] == "") + $header["DATE"] = time(); + $i++; + } + else { + $i++; + } + } + return $header; + } + + + /****************************************************************************** + ** Returns the body of a message. + ******************************************************************************/ + function sqimap_get_message_body ($imap_stream, $bound, $id, $type0, $type1, $encoding, $charset) { + fputs ($imap_stream, "a001 FETCH $id:$id BODY[TEXT]\r\n"); + $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message); + + $i = 0; + $j = 0; + while ($i < count($read)-1) { + if ( ($i != 0) ) { + $bodytmp[$j] = $read[$i]; + $j++; + } + $i++; + } + $body = $bodytmp; + + return decodeMime($body, $bound, $type0, $type1, $encoding, $charset); + } +?> -- 2.25.1