|
@@ -11,8 +11,8 @@
|
|
return;
|
|
return;
|
|
define ('imap_general_php', true);
|
|
define ('imap_general_php', true);
|
|
|
|
|
|
- global $imap_general_debug;
|
|
|
|
- $imap_general_debug = false;
|
|
|
|
|
|
+global $imap_general_debug;
|
|
|
|
+$imap_general_debug = false;
|
|
|
|
|
|
/******************************************************************************
|
|
/******************************************************************************
|
|
** Sets an unique session id in order to avoid simultanous sessions crash.
|
|
** Sets an unique session id in order to avoid simultanous sessions crash.
|
|
@@ -30,10 +30,11 @@
|
|
******************************************************************************/
|
|
******************************************************************************/
|
|
|
|
|
|
function sqimap_read_data_list ($imap_stream, $pre, $handle_errors,
|
|
function sqimap_read_data_list ($imap_stream, $pre, $handle_errors,
|
|
- &$response, &$message) {
|
|
|
|
- global $color, $squirrelmail_language, $imap_general_debug;
|
|
|
|
|
|
+ &$response, &$message) {
|
|
|
|
+ global $color, $squirrelmail_language;
|
|
|
|
+global $imap_general_debug;
|
|
|
|
|
|
- $read = "";
|
|
|
|
|
|
+ $read = '';
|
|
$resultlist = array();
|
|
$resultlist = array();
|
|
|
|
|
|
$more_msgs = true;
|
|
$more_msgs = true;
|
|
@@ -48,11 +49,11 @@
|
|
$size = $regs[1];
|
|
$size = $regs[1];
|
|
} else if (ereg("^\\* [0-9]+ FETCH", $read, $regs)) {
|
|
} else if (ereg("^\\* [0-9]+ FETCH", $read, $regs)) {
|
|
// Sizeless response, probably single-line
|
|
// Sizeless response, probably single-line
|
|
- // For debugging purposes
|
|
|
|
- if ($imap_general_debug) {
|
|
|
|
- echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
|
|
|
|
- flush();
|
|
|
|
- }
|
|
|
|
|
|
+// For debugging purposes
|
|
|
|
+if ($imap_general_debug) {
|
|
|
|
+ echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
|
|
|
|
+ flush();
|
|
|
|
+}
|
|
$size = 0;
|
|
$size = 0;
|
|
$data[] = $read;
|
|
$data[] = $read;
|
|
$read = fgets($imap_stream, 9096);
|
|
$read = fgets($imap_stream, 9096);
|
|
@@ -63,11 +64,11 @@
|
|
while (strpos($read, "\n") === false) {
|
|
while (strpos($read, "\n") === false) {
|
|
$read .= fgets($imap_stream, 9096);
|
|
$read .= fgets($imap_stream, 9096);
|
|
}
|
|
}
|
|
- // For debugging purposes
|
|
|
|
- if ($imap_general_debug) {
|
|
|
|
- echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
|
|
|
|
- flush();
|
|
|
|
- }
|
|
|
|
|
|
+// For debugging purposes
|
|
|
|
+if ($imap_general_debug) {
|
|
|
|
+ echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
|
|
|
|
+ flush();
|
|
|
|
+}
|
|
// If we know the size, no need to look at the end parameters
|
|
// If we know the size, no need to look at the end parameters
|
|
if ($size > 0) {
|
|
if ($size > 0) {
|
|
if ($total_size == $size) {
|
|
if ($total_size == $size) {
|
|
@@ -83,9 +84,9 @@
|
|
} else {
|
|
} else {
|
|
$data[] = $read;
|
|
$data[] = $read;
|
|
$read = fgets($imap_stream, 9096);
|
|
$read = fgets($imap_stream, 9096);
|
|
- while (strpos($read, "\n") === false) {
|
|
|
|
- $read .= fgets($imap_stream, 9096);
|
|
|
|
- }
|
|
|
|
|
|
+ while (strpos($read, "\n") === false) {
|
|
|
|
+ $read .= fgets($imap_stream, 9096);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
$total_size += strlen($read);
|
|
$total_size += strlen($read);
|
|
} else {
|
|
} else {
|
|
@@ -108,7 +109,7 @@
|
|
$response = $regs[1];
|
|
$response = $regs[1];
|
|
$message = trim($regs[2]);
|
|
$message = trim($regs[2]);
|
|
|
|
|
|
- if ($imap_general_debug) echo '--<br>';
|
|
|
|
|
|
+if ($imap_general_debug) echo '--<br>';
|
|
|
|
|
|
if ($handle_errors == false)
|
|
if ($handle_errors == false)
|
|
return $resultlist;
|
|
return $resultlist;
|
|
@@ -137,10 +138,10 @@
|
|
}
|
|
}
|
|
|
|
|
|
function sqimap_read_data ($imap_stream, $pre, $handle_errors, &$response, &$message) {
|
|
function sqimap_read_data ($imap_stream, $pre, $handle_errors, &$response, &$message) {
|
|
- $res = sqimap_read_data_list($imap_stream, $pre, $handle_errors, $response, $message);
|
|
|
|
- return $res[0];
|
|
|
|
|
|
+ $res = sqimap_read_data_list($imap_stream, $pre, $handle_errors, $response, $message);
|
|
|
|
+ return $res[0];
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/******************************************************************************
|
|
/******************************************************************************
|
|
** Logs the user into the imap server. If $hide is set, no error messages
|
|
** Logs the user into the imap server. If $hide is set, no error messages
|
|
** will be displayed. This function returns the imap connection handle.
|
|
** will be displayed. This function returns the imap connection handle.
|
|
@@ -151,7 +152,7 @@
|
|
$imap_stream = fsockopen ($imap_server_address, $imap_port,
|
|
$imap_stream = fsockopen ($imap_server_address, $imap_port,
|
|
$error_number, $error_string, 15);
|
|
$error_number, $error_string, 15);
|
|
$server_info = fgets ($imap_stream, 1024);
|
|
$server_info = fgets ($imap_stream, 1024);
|
|
-
|
|
|
|
|
|
+
|
|
// Decrypt the password
|
|
// Decrypt the password
|
|
$password = OneTimePadDecrypt($password, $onetimepad);
|
|
$password = OneTimePadDecrypt($password, $onetimepad);
|
|
|
|
|
|
@@ -165,7 +166,7 @@
|
|
exit;
|
|
exit;
|
|
}
|
|
}
|
|
|
|
|
|
- fputs ($imap_stream, sqimap_session_id() . ' LOGIN "' . quoteIMAP($username) .
|
|
|
|
|
|
+ fputs ($imap_stream, sqimap_session_id() . ' LOGIN "' . quoteIMAP($username) .
|
|
'" "' . quoteIMAP($password) . "\"\r\n");
|
|
'" "' . quoteIMAP($password) . "\"\r\n");
|
|
$read = sqimap_read_data ($imap_stream, sqimap_session_id(), false, $response, $message);
|
|
$read = sqimap_read_data ($imap_stream, sqimap_session_id(), false, $response, $message);
|
|
|
|
|
|
@@ -181,12 +182,12 @@
|
|
printf (_("Unknown error: %s") . "<br>\n", $message);
|
|
printf (_("Unknown error: %s") . "<br>\n", $message);
|
|
echo '<br>';
|
|
echo '<br>';
|
|
echo _("Read data:") . "<br>\n";
|
|
echo _("Read data:") . "<br>\n";
|
|
- if (is_array($read))
|
|
|
|
- {
|
|
|
|
- foreach ($read as $line)
|
|
|
|
- {
|
|
|
|
- echo htmlspecialchars($line) . "<br>\n";
|
|
|
|
- }
|
|
|
|
|
|
+ if (is_array($read))
|
|
|
|
+ {
|
|
|
|
+ foreach ($read as $line)
|
|
|
|
+ {
|
|
|
|
+ echo htmlspecialchars($line) . "<br>\n";
|
|
|
|
+ }
|
|
}
|
|
}
|
|
exit;
|
|
exit;
|
|
} else {
|
|
} else {
|
|
@@ -198,9 +199,9 @@
|
|
|
|
|
|
// $squirrelmail_language is set by a cookie when
|
|
// $squirrelmail_language is set by a cookie when
|
|
// the user selects language and logs out
|
|
// the user selects language and logs out
|
|
-
|
|
|
|
|
|
+
|
|
set_up_language($squirrelmail_language, true);
|
|
set_up_language($squirrelmail_language, true);
|
|
-
|
|
|
|
|
|
+
|
|
?>
|
|
?>
|
|
<html>
|
|
<html>
|
|
<body bgcolor="ffffff">
|
|
<body bgcolor="ffffff">
|
|
@@ -251,32 +252,32 @@
|
|
}
|
|
}
|
|
|
|
|
|
function sqimap_capability($imap_stream, $capability) {
|
|
function sqimap_capability($imap_stream, $capability) {
|
|
- global $sqimap_capabilities;
|
|
|
|
- global $imap_general_debug;
|
|
|
|
-
|
|
|
|
- if (!is_array($sqimap_capabilities)) {
|
|
|
|
- fputs ($imap_stream, sqimap_session_id() . " CAPABILITY\r\n");
|
|
|
|
- $read = sqimap_read_data($imap_stream, sqimap_session_id(), true, $a, $b);
|
|
|
|
-
|
|
|
|
- $c = explode(' ', $read[0]);
|
|
|
|
- for ($i=2; $i < count($c); $i++) {
|
|
|
|
- $cap_list = explode('=', $c[$i]);
|
|
|
|
- if (isset($cap_list[1]))
|
|
|
|
- $sqimap_capabilities[$cap_list[0]] = $cap_list[1];
|
|
|
|
- else
|
|
|
|
- $sqimap_capabilities[$cap_list[0]] = TRUE;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (! isset($sqimap_capabilities[$capability]))
|
|
|
|
- return false;
|
|
|
|
- return $sqimap_capabilities[$capability];
|
|
|
|
-}
|
|
|
|
|
|
+ global $sqimap_capabilities;
|
|
|
|
+global $imap_general_debug;
|
|
|
|
+
|
|
|
|
+ if (!is_array($sqimap_capabilities)) {
|
|
|
|
+ fputs ($imap_stream, sqimap_session_id() . " CAPABILITY\r\n");
|
|
|
|
+ $read = sqimap_read_data($imap_stream, sqimap_session_id(), true, $a, $b);
|
|
|
|
+
|
|
|
|
+ $c = explode(' ', $read[0]);
|
|
|
|
+ for ($i=2; $i < count($c); $i++) {
|
|
|
|
+ $cap_list = explode('=', $c[$i]);
|
|
|
|
+ if (isset($cap_list[1]))
|
|
|
|
+ $sqimap_capabilities[$cap_list[0]] = $cap_list[1];
|
|
|
|
+ else
|
|
|
|
+ $sqimap_capabilities[$cap_list[0]] = TRUE;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (! isset($sqimap_capabilities[$capability]))
|
|
|
|
+ return false;
|
|
|
|
+ return $sqimap_capabilities[$capability];
|
|
|
|
+ }
|
|
|
|
|
|
/******************************************************************************
|
|
/******************************************************************************
|
|
** Returns the delimeter between mailboxes: INBOX/Test, or INBOX.Test...
|
|
** Returns the delimeter between mailboxes: INBOX/Test, or INBOX.Test...
|
|
******************************************************************************/
|
|
******************************************************************************/
|
|
function sqimap_get_delimiter ($imap_stream = false) {
|
|
function sqimap_get_delimiter ($imap_stream = false) {
|
|
- global $imap_general_debug;
|
|
|
|
|
|
+global $imap_general_debug;
|
|
global $sqimap_delimiter;
|
|
global $sqimap_delimiter;
|
|
global $optional_delimiter;
|
|
global $optional_delimiter;
|
|
|
|
|
|
@@ -286,38 +287,38 @@
|
|
|
|
|
|
/* Do some caching here */
|
|
/* Do some caching here */
|
|
if (!$sqimap_delimiter) {
|
|
if (!$sqimap_delimiter) {
|
|
- if (sqimap_capability($imap_stream, "NAMESPACE")) {
|
|
|
|
- /* According to something that I can't find, this is supposed to work on all systems
|
|
|
|
- OS: This won't work in Courier IMAP.
|
|
|
|
- OS: According to rfc2342 response from NAMESPACE command is:
|
|
|
|
- OS: * NAMESPACE (PERSONAL NAMESPACES) (OTHER_USERS NAMESPACE) (SHARED NAMESPACES)
|
|
|
|
- OS: We want to lookup all personal NAMESPACES...
|
|
|
|
- */
|
|
|
|
- fputs ($imap_stream, sqimap_session_id() . " NAMESPACE\r\n");
|
|
|
|
- $read = sqimap_read_data($imap_stream, sqimap_session_id(), true, $a, $b);
|
|
|
|
- if (eregi('\\* NAMESPACE +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL)', $read[0], $data)) {
|
|
|
|
- if (eregi('^\\( *\\((.*)\\) *\\)', $data[1], $data2))
|
|
|
|
- $pn = $data2[1];
|
|
|
|
- $pna = explode(')(', $pn);
|
|
|
|
- while (list($k, $v) = each($pna))
|
|
|
|
- {
|
|
|
|
|
|
+ if (sqimap_capability($imap_stream, "NAMESPACE")) {
|
|
|
|
+ /* According to something that I can't find, this is supposed to work on all systems
|
|
|
|
+ OS: This won't work in Courier IMAP.
|
|
|
|
+ OS: According to rfc2342 response from NAMESPACE command is:
|
|
|
|
+ OS: * NAMESPACE (PERSONAL NAMESPACES) (OTHER_USERS NAMESPACE) (SHARED NAMESPACES)
|
|
|
|
+ OS: We want to lookup all personal NAMESPACES...
|
|
|
|
+ */
|
|
|
|
+ fputs ($imap_stream, sqimap_session_id() . " NAMESPACE\r\n");
|
|
|
|
+ $read = sqimap_read_data($imap_stream, sqimap_session_id(), true, $a, $b);
|
|
|
|
+ if (eregi('\\* NAMESPACE +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL)', $read[0], $data)) {
|
|
|
|
+ if (eregi('^\\( *\\((.*)\\) *\\)', $data[1], $data2))
|
|
|
|
+ $pn = $data2[1];
|
|
|
|
+ $pna = explode(')(', $pn);
|
|
|
|
+ while (list($k, $v) = each($pna))
|
|
|
|
+ {
|
|
$lst = explode('"', $v);
|
|
$lst = explode('"', $v);
|
|
if (isset($lst[3])) {
|
|
if (isset($lst[3])) {
|
|
$pn[$lst[1]] = $lst[3];
|
|
$pn[$lst[1]] = $lst[3];
|
|
} else {
|
|
} else {
|
|
$pn[$lst[1]] = '';
|
|
$pn[$lst[1]] = '';
|
|
}
|
|
}
|
|
- }
|
|
|
|
- }
|
|
|
|
- $sqimap_delimiter = $pn[0];
|
|
|
|
- } else {
|
|
|
|
- fputs ($imap_stream, ". LIST \"INBOX\" \"\"\r\n");
|
|
|
|
- $read = sqimap_read_data($imap_stream, '.', true, $a, $b);
|
|
|
|
- $quote_position = strpos ($read[0], '"');
|
|
|
|
- $sqimap_delimiter = substr ($read[0], $quote_position+1, 1);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return $sqimap_delimiter;
|
|
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ $sqimap_delimiter = $pn[0];
|
|
|
|
+ } else {
|
|
|
|
+ fputs ($imap_stream, ". LIST \"INBOX\" \"\"\r\n");
|
|
|
|
+ $read = sqimap_read_data($imap_stream, '.', true, $a, $b);
|
|
|
|
+ $quote_position = strpos ($read[0], '"');
|
|
|
|
+ $sqimap_delimiter = substr ($read[0], $quote_position+1, 1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return $sqimap_delimiter;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -329,7 +330,7 @@
|
|
$read_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $result, $message);
|
|
$read_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $result, $message);
|
|
for ($i = 0; $i < count($read_ary); $i++) {
|
|
for ($i = 0; $i < count($read_ary); $i++) {
|
|
if (ereg("[^ ]+ +([^ ]+) +EXISTS", $read_ary[$i], $regs)) {
|
|
if (ereg("[^ ]+ +([^ ]+) +EXISTS", $read_ary[$i], $regs)) {
|
|
- return $regs[1];
|
|
|
|
|
|
+ return $regs[1];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return "BUG! Couldn't get number of messages in $mailbox!";
|
|
return "BUG! Couldn't get number of messages in $mailbox!";
|