X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap.php;h=2fa499f64be3065665220e68e17d9bc2ab11133c;hb=66488126ca870faca2630ee5693f15f3423fa662;hp=267bce91a9659f010d9ab9905b000498c241c490;hpb=832bfcad0171a020cd3e2761bacaab4a4ea4426a;p=squirrelmail.git
diff --git a/functions/imap.php b/functions/imap.php
index 267bce91..2fa499f6 100644
--- a/functions/imap.php
+++ b/functions/imap.php
@@ -1,329 +1,14 @@
-
- /**
- ** imap.php
- **
- ** Functions for the IMAP connection
- **
+ERROR: Could not complete request.
Reason given: $message
";
- exit;
- } else if ($response == "BAD") {
- echo "
ERROR: Bad or malformed request.
Server responded: $message
";
- exit;
- }
- }
-
- return $data;
- }
-
- /** Parse the incoming mailbox name and return a string that is the FOLDER.MAILBOX **/
- function findMailboxName($mailbox) {
- $mailbox = trim($mailbox);
- if (substr($mailbox, strlen($mailbox)-1, strlen($mailbox)) == "\"") {
- $mailbox = substr($mailbox, 0, strlen($mailbox) - 1);
- $pos = strrpos($mailbox, "\"") + 1;
- $box = substr($mailbox, $pos, strlen($mailbox));
- } else {
- $box = substr($mailbox, strrpos($mailbox, " ")+1, strlen($mailbox));
- }
- return $box;
- }
-
- /** Finds the delimeter between mailboxes **/
- function findMailboxDelimeter($imapConnection) {
- fputs($imapConnection, ". list \"\" \"\"\n");
- $read = fgets($imapConnection, 1024);
-
- if (strrpos($read, "\"") == strlen($read)) {
- $pos = strrpos($read, "\"");
- $read = substr($read, 0, $pos);
-
- $pos = strrpos($read, "\"");
- $read = substr($read, 0, $pos);
- } else {
- $pos = strrpos($read, " ");
- $read = substr($read, 0, $pos);
- }
+ $imap_backend = 'imap';
- $pos = strrpos($read, "\"");
- $read = substr($read, 0, $pos);
-
- $pos = strrpos($read, "\"");
- $read = substr($read, $pos+1, strlen($read));
-
- $tmp = fgets($imapConnection, 1024);
- return $read;
- }
-
- function getMailboxFlags($mailbox) {
- $mailbox = trim($mailbox);
- $mailbox = substr($mailbox, strpos($mailbox, "(")+1, strlen($mailbox));
- $mailbox = substr($mailbox, 0, strpos($mailbox, ")"));
- $mailbox = str_replace("\\", "", $mailbox);
- $mailbox = strtolower($mailbox);
- $mailbox = explode(" ", $mailbox);
- return $mailbox;
- }
-
- // handles logging onto an imap server.
- function loginToImapServer($username, $key, $imapServerAddress, $hide) {
- require("../config/config.php");
-
- $imapConnection = fsockopen($imapServerAddress, 143, &$errorNumber, &$errorString);
- if (!$imapConnection) {
- echo "Error connecting to IMAP Server.
";
- echo "$errorNumber : $errorString
";
- exit;
- }
- $serverInfo = fgets($imapConnection, 256);
-
- // login
- fputs($imapConnection, "a001 LOGIN \"$username\" \"$key\"\n");
- $read = fgets($imapConnection, 1024);
- if ($debug_login == true) {
- echo "SERVER SAYS: $read
";
- }
-
- /** If the login attempt was UNsuccessful, lets see why **/
- if (substr($read, 0, 7) != "a001 OK") {
- if (!$hide) {
- if (substr($read, 0, 8) == "a001 BAD") {
- echo "Bad request: $read
";
- exit;
- }
- else if (substr($read, 0, 7) == "a001 NO") {
- echo "
";
- echo "";
- echo " ";
- echo " ";
- echo " ERROR";
- echo " |
";
- echo " Unknown user or password incorrect. Click here to try again.";
- echo " |
";
- echo "
";
- echo "";
- exit;
- }
- else {
- echo "Unknown error: $read
";
- exit;
- }
- } else {
- exit;
- }
- }
-
- return $imapConnection;
- }
-
- /** must be sent in the form: user.. **/
- function createFolder($imapConnection, $folder, $type) {
- require ("../config/config.php");
-
- if (strtolower($type) == "noselect") {
- $dm = findMailboxDelimeter($imapConnection);
- $folder = "$folder$dm";
- } else {
- $folder = "$folder";
- }
- fputs($imapConnection, "1 create \"$folder\"\n");
- $data = imapReadData($imapConnection, "1", false, $response, $message);
-
- if ($response == "NO") {
- echo "
ERROR: Could not complete request.
Reason given: $message
";
- echo "Possible solutions:
You may need to specify that the folder is a subfolder of INBOX";
- echo "Try renaming the folder to something different.";
- exit;
- } else if ($response == "BAD") {
- echo "ERROR: Bad or malformed request.
Server responded: $message
";
- exit;
- }
- fputs($imapConnection, "1 SUBSCRIBE \"$folder\"\n");
- $data = imapReadData($imapConnection, "1", true, $response, $message);
- }
-
- function removeFolder($imapConnection, $folder) {
- fputs($imapConnection, "1 delete \"$folder\"\n");
- $data = imapReadData($imapConnection, "1", false, $response, $message);
- if ($response == "NO") {
- echo "ERROR: Could not delete the folder $folder.";
- echo "Probable causes:
";
- echo "This folder may contain subfolders. Delete all subfolders first";
- exit;
- } else if ($response == "BAD") {
- echo "ERROR: Bad or malformed request.
Server responded: $message
";
- exit;
- }
- }
-
- /** Sends back two arrays, boxesFormatted and boxesUnformatted **/
- function getFolderList($imapConnection, &$boxes) {
- require ("../config/config.php");
- if (!function_exists("ary_sort"))
- include("../functions/array.php");
-
- /** First we get the inbox **/
- fputs($imapConnection, "1 LIST \"\" INBOX\n");
- $str = imapReadData($imapConnection, "1", true, $response, $message);
- $dm = findMailboxDelimeter($imapConnection);
- $g = 0;
- for ($i = 0;$i < count($str); $i++) {
- $mailbox = chop($str[$i]);
- if (substr(findMailboxName($mailbox), 0, 1) != ".") {
- $boxes[$g]["RAW"] = $mailbox;
-
- $mailbox = findMailboxName($mailbox);
- $periodCount = countCharInString($mailbox, $dm);
-
- // indent the correct number of spaces.
- for ($j = 0;$j < $periodCount;$j++)
- $boxes[$g]["FORMATTED"] = $boxes[$g]["FORMATTED"] . " ";
-
- $boxes[$g]["FORMATTED"] = $boxes[$g]["FORMATTED"] . readShortMailboxName($mailbox, $dm);
- $boxes[$g]["UNFORMATTED"] = $mailbox;
- $boxes[$g]["ID"] = $g;
- $g++;
- }
- }
-
- /** Next, we get all subscribed folders **/
- fputs($imapConnection, "1 LSUB \"\" *\n");
- $str = imapReadData($imapConnection, "1", true, $response, $message);
- $dm = findMailboxDelimeter($imapConnection);
- for ($i = 0;$i < count($str); $i++) {
- $mailbox = chop($str[$i]);
- if (substr(findMailboxName($mailbox), 0, 1) != ".") {
- $boxes[$g]["RAW"] = $mailbox;
-
- $mailbox = findMailboxName($mailbox);
- $periodCount = countCharInString($mailbox, $dm);
-
- // indent the correct number of spaces.
- for ($j = 0;$j < $periodCount;$j++)
- $boxes[$g]["FORMATTED"] = $boxes[$g]["FORMATTED"] . " ";
-
- $boxes[$g]["FORMATTED"] = $boxes[$g]["FORMATTED"] . readShortMailboxName($mailbox, $dm);
- $boxes[$g]["UNFORMATTED"] = $mailbox;
- $boxes[$g]["ID"] = $g;
- $g++;
- }
- }
-
- $original = $boxes;
-
- for ($i = 0; $i < count($original); $i++) {
- $boxes[$i]["UNFORMATTED"] = strtolower($boxes[$i]["UNFORMATTED"]);
- }
-
- $boxes = ary_sort($boxes, "UNFORMATTED", 1);
-
- for ($i = 0; $i < count($original); $i++) {
- for ($j = 0; $j < count($original); $j++) {
- if ($boxes[$i]["ID"] == $original[$j]["ID"]) {
- $boxes[$i]["UNFORMATTED"] = $original[$j]["UNFORMATTED"];
- $boxes[$i]["FORMATTED"] = $original[$j]["FORMATTED"];
- $boxes[$i]["RAW"] = $original[$j]["RAW"];
- }
- }
- }
-
- for ($i = 0; $i < count($boxes); $i++) {
- if ($boxes[$i]["UNFORMATTED"] == $special_folders[0]) {
- $boxesnew[0]["FORMATTED"] = $boxes[$i]["FORMATTED"];
- $boxesnew[0]["UNFORMATTED"] = trim($boxes[$i]["UNFORMATTED"]);
- $boxesnew[0]["RAW"] = trim($boxes[$i]["RAW"]);
- $boxes[$i]["USED"] = true;
- }
- }
- if ($list_special_folders_first == true) {
- for ($i = 0; $i < count($boxes); $i++) {
- for ($j = 1; $j < count($special_folders); $j++) {
- if (substr($boxes[$i]["UNFORMATTED"], 0, strlen($special_folders[$j])) == $special_folders[$j]) {
- $pos = count($boxesnew);
- $boxesnew[$pos]["FORMATTED"] = $boxes[$i]["FORMATTED"];
- $boxesnew[$pos]["RAW"] = trim($boxes[$i]["RAW"]);
- $boxesnew[$pos]["UNFORMATTED"] = trim($boxes[$i]["UNFORMATTED"]);
- $boxes[$i]["USED"] = true;
- }
- }
- }
- }
- for ($i = 0; $i < count($boxes); $i++) {
- if (($boxes[$i]["UNFORMATTED"] != $special_folders[0]) &&
- ($boxes[$i]["UNFORMATTED"] != ".mailboxlist") &&
- ($boxes[$i]["USED"] == false)) {
- $pos = count($boxesnew);
- $boxesnew[$pos]["FORMATTED"] = $boxes[$i]["FORMATTED"];
- $boxesnew[$pos]["RAW"] = trim($boxes[$i]["RAW"]);
- $boxesnew[$pos]["UNFORMATTED"] = trim($boxes[$i]["UNFORMATTED"]);
- $boxes[$i]["USED"] = true;
- }
- }
-
- $boxes = $boxesnew;
- }
-
- function deleteMessages($imapConnection, $a, $b, $numMessages, $trash_folder, $move_to_trash, $auto_expunge, $mailbox) {
- /** check if they would like to move it to the trash folder or not */
- if (($move_to_trash == true) && (folderExists($imapConnection, $trash_folder))) {
- $success = copyMessages($imapConnection, $a, $b, $trash_folder);
- if ($success == true)
- setMessageFlag($imapConnection, $a, $b, "Deleted");
- } else {
- setMessageFlag($imapConnection, $a, $b, "Deleted");
- }
- if ($auto_expunge == true)
- expungeBox($imapConnection, $mailbox);
- }
-
- function stripComments($line) {
- if (strpos($line, ";")) {
- $line = substr($line, 0, strpos($line, ";"));
- }
-
- if (strpos($line, "(") && strpos($line, ")")) {
- $full_line = $full_line . substr($line, 0, strpos($line, "("));
- $full_line = $full_line . substr($line, strpos($line, ")")+1, strlen($line) - strpos($line, ")"));
- } else {
- $full_line = $line;
- }
- return $full_line;
- }
-
- function folderExists($imapConnection, $folderName) {
- getFolderList($imapConnection, $folders);
- $found = false;
- for ($i = 0; ($i < count($folders)) && (!$found); $i++) {
- if ($folders[$i]["UNFORMATTED"] == $folderName)
- $found = true;
- }
- return $found;
- }
+ include ("../functions/".$imap_backend."_mailbox.php");
+ include ("../functions/".$imap_backend."_messages.php");
+ include ("../functions/".$imap_backend."_general.php");
+ include ("../functions/".$imap_backend."_search.php");
?>