global $imap_general_debug;
$imap_general_debug = false;
+ /******************************************************************************
+ ** Sets an unique session id in order to avoid simultanous sessions crash.
+ ******************************************************************************/
+
+ function sqimap_session_id() {
+ return( substr( session_id(), -4 ) );
+ }
+
+
/******************************************************************************
** Reads the output from the IMAP stream. If handle_errors is set to true,
** this will also handle all errors that are received. If it is not set,
exit;
}
- fputs ($imap_stream, "a001 LOGIN \"" . quoteIMAP($username) .
+ fputs ($imap_stream, sqimap_session_id() . ' LOGIN "' . quoteIMAP($username) .
'" "' . quoteIMAP($password) . "\"\r\n");
- $read = sqimap_read_data ($imap_stream, 'a001', false, $response, $message);
+ $read = sqimap_read_data ($imap_stream, sqimap_session_id(), false, $response, $message);
/** If the connection was not successful, lets see why **/
if ($response != "OK") {
** Simply logs out the imap session
******************************************************************************/
function sqimap_logout ($imap_stream) {
- fputs ($imap_stream, "a001 LOGOUT\r\n");
+ fputs ($imap_stream, sqimap_session_id() . " LOGOUT\r\n");
}
function sqimap_capability($imap_stream, $capability) {
global $imap_general_debug;
if (!is_array($sqimap_capabilities)) {
- fputs ($imap_stream, "a001 CAPABILITY\r\n");
- $read = sqimap_read_data($imap_stream, 'a001', true, $a, $b);
+ 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++) {
OS: * NAMESPACE (PERSONAL NAMESPACES) (OTHER_USERS NAMESPACE) (SHARED NAMESPACES)
OS: We want to lookup all personal NAMESPACES...
*/
- fputs ($imap_stream, "a001 NAMESPACE\r\n");
- $read = sqimap_read_data($imap_stream, 'a001', true, $a, $b);
+ 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];
** 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);
+ fputs ($imap_stream, sqimap_session_id() . " EXAMINE \"$mailbox\"\r\n");
+ $read_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $result, $message);
for ($i = 0; $i < count($read_ary); $i++) {
if (ereg("[^ ]+ +([^ ]+) +EXISTS", $read_ary[$i], $regs)) {
return $regs[1];
** Returns the number of unseen messages in this folder
******************************************************************************/
function sqimap_unseen_messages ($imap_stream, $mailbox) {
- //fputs ($imap_stream, "a001 SEARCH UNSEEN NOT DELETED\r\n");
- fputs ($imap_stream, "a001 STATUS \"$mailbox\" (UNSEEN)\r\n");
- $read_ary = sqimap_read_data ($imap_stream, 'a001', true, $result, $message);
+ //fputs ($imap_stream, sqimap_session_id() . " SEARCH UNSEEN NOT DELETED\r\n");
+ fputs ($imap_stream, sqimap_session_id() . " STATUS \"$mailbox\" (UNSEEN)\r\n");
+ $read_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $result, $message);
ereg("UNSEEN ([0-9]+)", $read_ary[0], $regs);
return $regs[1];
}
** 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");
+ fputs ($imap_stream, sqimap_session_id() . " APPEND \"$sent_folder\" (\\Seen) \{$length}\r\n");
$tmp = fgets ($imap_stream, 1024);
}
** Expunges a mailbox
******************************************************************************/
function sqimap_mailbox_expunge ($imap_stream, $mailbox,$handle_errors = true) {
- fputs ($imap_stream, "a001 EXPUNGE\r\n");
- $read = sqimap_read_data($imap_stream, "a001", $handle_errors, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " EXPUNGE\r\n");
+ $read = sqimap_read_data($imap_stream, sqimap_session_id(), $handle_errors, $response, $message);
}
function sqimap_mailbox_exists ($imap_stream, $mailbox) {
if (! isset($mailbox))
return false;
- fputs ($imap_stream, "a001 LIST \"\" \"$mailbox\"\r\n");
- $mbx = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " LIST \"\" \"$mailbox\"\r\n");
+ $mbx = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
return isset($mbx[0]);
}
if( $mailbox == _("None") )
return;
- fputs ($imap_stream, "a001 SELECT \"$mailbox\"\r\n");
- $read = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " SELECT \"$mailbox\"\r\n");
+ $read = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
if ($recent) {
for ($i=0; $i<count($read); $i++) {
if (strpos(strtolower($read[$i]), "recent")) {
return $r[1];
}
if ($auto_expunge) {
- fputs ($imap_stream, "a001 EXPUNGE\r\n");
- $tmp = sqimap_read_data($imap_stream, "a001", false, $a, $b);
+ fputs ($imap_stream, sqimap_session_id() . " EXPUNGE\r\n");
+ $tmp = sqimap_read_data($imap_stream, sqimap_session_id(), false, $a, $b);
}
}
$dm = sqimap_get_delimiter($imap_stream);
$mailbox = $mailbox.$dm;
}
- fputs ($imap_stream, "a001 CREATE \"$mailbox\"\r\n");
- $read_ary = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " CREATE \"$mailbox\"\r\n");
+ $read_ary = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
sqimap_subscribe ($imap_stream, $mailbox);
}
** Subscribes to an existing folder
******************************************************************************/
function sqimap_subscribe ($imap_stream, $mailbox) {
- fputs ($imap_stream, "a001 SUBSCRIBE \"$mailbox\"\r\n");
- $read_ary = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " SUBSCRIBE \"$mailbox\"\r\n");
+ $read_ary = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
}
function sqimap_unsubscribe ($imap_stream, $mailbox) {
global $imap_server_type;
- fputs ($imap_stream, "a001 UNSUBSCRIBE \"$mailbox\"\r\n");
- $read_ary = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " UNSUBSCRIBE \"$mailbox\"\r\n");
+ $read_ary = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
}
** This function simply deletes the given folder
******************************************************************************/
function sqimap_mailbox_delete ($imap_stream, $mailbox) {
- fputs ($imap_stream, "a001 DELETE \"$mailbox\"\r\n");
- $read_ary = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " DELETE \"$mailbox\"\r\n");
+ $read_ary = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
sqimap_unsubscribe ($imap_stream, $mailbox);
}
$dm = sqimap_get_delimiter ($imap_stream);
/** LSUB array **/
- fputs ($imap_stream, "a001 LSUB \"$folder_prefix\" \"*\"\r\n");
- $lsub_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " LSUB \"$folder_prefix\" \"*\"\r\n");
+ $lsub_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
// Section about removing the last element was removed
// We don't return "* OK" anymore from sqimap_read_data
else
$mbx = $sorted_lsub_ary[$i];
- fputs ($imap_stream, "a001 LIST \"\" \"$mbx\"\r\n");
- $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " LIST \"\" \"$mbx\"\r\n");
+ $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
// Another workaround for EIMS
if (isset($read[1]) &&
ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$",
/** Just in case they're not subscribed to their inbox, we'll get it
for them anyway **/
if ($inbox_subscribed == false || $inbox_in_list == false) {
- fputs ($imap_stream, "a001 LIST \"\" \"INBOX\"\r\n");
- $inbox_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " LIST \"\" \"INBOX\"\r\n");
+ $inbox_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
// Another workaround for EIMS
if (isset($inbox_ary[1]) &&
ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$",
$dm = sqimap_get_delimiter ($imap_stream);
- fputs ($imap_stream, "a001 LIST \"$folder_prefix\" *\r\n");
- $read_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ $ssid = sqimap_session_id();
+ $lsid = strlen( $ssid );
+ fputs ($imap_stream, $ssid . " LIST \"$folder_prefix\" *\r\n");
+ $read_ary = sqimap_read_data ($imap_stream, $ssid, true, $response, $message);
$g = 0;
- $phase = "inbox";
+ $phase = "inbox";
for ($i = 0; $i < count($read_ary); $i++) {
// Another workaround for EIMS
- if (isset($read_ary[$i + 1]) &&
- ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$",
- $read_ary[$i], $regs)) {
- $i ++;
- $read_ary[$i] = $regs[1] . '"' .
- addslashes(trim($read_ary[$i])) .
- '"' . $regs[2];
- }
- if (substr ($read_ary[$i], 0, 4) != "a001") {
+ if (isset($read_ary[$i + 1]) &&
+ ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$",
+ $read_ary[$i], $regs)) {
+ $i ++;
+ $read_ary[$i] = $regs[1] . '"' .
+ addslashes(trim($read_ary[$i])) .
+ '"' . $regs[2];
+ }
+ if (substr ($read_ary[$i], 0, $lsid) != $ssid ) {
// Store the raw IMAP reply
$boxes[$g]["raw"] = $read_ary[$i];
$boxes[$g]["id"] = $g;
/** Now lets get the flags for this mailbox **/
- fputs ($imap_stream, "a002 LIST \"\" \"$mailbox\"\r\n");
- $read_mlbx = sqimap_read_data ($imap_stream, "a002", true, $response, $message);
- // Another workaround for EIMS
- if (isset($read_mlbx[1]) &&
- ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$",
- $read_mlbx[0], $regs)) {
- $read_mlbx[0] = $regs[1] . '"' .
- addslashes(trim($read_mlbx[1])) .
- '"' . $regs[2];
- }
+ fputs ($imap_stream, sqimap_session_id() . " LIST \"\" \"$mailbox\"\r\n");
+ $read_mlbx = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
+
+ // Another workaround for EIMS
+ if (isset($read_mlbx[1]) &&
+ ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$",
+ $read_mlbx[0], $regs)) {
+ $read_mlbx[0] = $regs[1] . '"' .
+ addslashes(trim($read_mlbx[1])) .
+ '"' . $regs[2];
+ }
$flags = substr($read_mlbx[0], strpos($read_mlbx[0], "(")+1);
$flags = substr($flags, 0, strpos($flags, ")"));
** Copies specified messages to specified folder
******************************************************************************/
function sqimap_messages_copy ($imap_stream, $start, $end, $mailbox) {
- fputs ($imap_stream, "a001 COPY $start:$end \"$mailbox\"\r\n");
- $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " COPY $start:$end \"$mailbox\"\r\n");
+ $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
}
/******************************************************************************
** Sets the specified messages with specified flag
******************************************************************************/
function sqimap_messages_flag ($imap_stream, $start, $end, $flag) {
- fputs ($imap_stream, "a001 STORE $start:$end +FLAGS (\\$flag)\r\n");
- $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " STORE $start:$end +FLAGS (\\$flag)\r\n");
+ $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
}
** Remove specified flag from specified messages
******************************************************************************/
function sqimap_messages_remove_flag ($imap_stream, $start, $end, $flag) {
- fputs ($imap_stream, "a001 STORE $start:$end -FLAGS (\\$flag)\r\n");
- $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " STORE $start:$end -FLAGS (\\$flag)\r\n");
+ $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
}
}
- $query = "a001 FETCH $msgs_str BODY.PEEK[HEADER.FIELDS (Date To From Cc Subject Message-Id X-Priority Content-Type)]\r\n";
+ $query = sqimap_session_id() . " FETCH $msgs_str BODY.PEEK[HEADER.FIELDS (Date To From Cc Subject Message-Id X-Priority Content-Type)]\r\n";
fputs ($imap_stream, $query);
- $readin_list = sqimap_read_data_list($imap_stream, "a001", true, $response, $message);
+ $readin_list = sqimap_read_data_list($imap_stream, sqimap_session_id(), true, $response, $message);
foreach ($readin_list as $r) {
}
arsort($read_list);
- $query = "a002 FETCH $msgs_str RFC822.SIZE\r\n";
+ $query = sqimap_session_id() . " FETCH $msgs_str RFC822.SIZE\r\n";
fputs ($imap_stream, $query);
- $sizesin_list = sqimap_read_data_list($imap_stream, "a002", true, $response, $message);
+ $sizesin_list = sqimap_read_data_list($imap_stream, sqimap_session_id(), true, $response, $message);
foreach ($sizesin_list as $r) {
if (!eregi("^\\* ([0-9]+) FETCH", $r[0], $regs)) {
}
if (trim($date) == "") {
- fputs($imap_stream, "a002 FETCH $msg_list[$msgi] INTERNALDATE\r\n");
- $readdate = sqimap_read_data($imap_stream, "a002", true, $response, $message);
+ fputs($imap_stream, sqimap_session_id() . " FETCH $msg_list[$msgi] INTERNALDATE\r\n");
+ $readdate = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
if (eregi(".*INTERNALDATE \"(.*)\".*", $readdate[0], $regs)) {
$date_list = explode(" ", trim($regs[1]));
$date_list[0] = str_replace("-", " ", $date_list[0]);
** Returns the flags for the specified messages
******************************************************************************/
function sqimap_get_flags ($imap_stream, $i) {
- fputs ($imap_stream, "a001 FETCH $i:$i FLAGS\r\n");
- $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " FETCH $i:$i FLAGS\r\n");
+ $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
if (ereg("FLAGS(.*)", $read[0], $regs))
return explode(" ", trim(ereg_replace('[\\(\\)\\\\]', '', $regs[1])));
return Array('None');
for ($i = 0; $i < sizeof($msg_list); $i++) {
$id2index[$msg_list[$i]] = $i;
}
- fputs ($imap_stream, "a001 FETCH $msgs_str FLAGS\r\n");
- $result_list = sqimap_read_data_list ($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " FETCH $msgs_str FLAGS\r\n");
+ $result_list = sqimap_read_data_list ($imap_stream, sqimap_session_id(), true, $response, $message);
$result_flags = array();
for ($i = 0; $i < sizeof($result_list); $i++) {
** Wrapper function that reformats the header information.
******************************************************************************/
function sqimap_get_message_header ($imap_stream, $id, $mailbox) {
- fputs ($imap_stream, "a001 FETCH $id:$id BODY[HEADER]\r\n");
- $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " FETCH $id:$id BODY[HEADER]\r\n");
+ $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
$header = sqimap_get_header($imap_stream, $read);
$header->id = $id;
$urlMailbox = urlencode($mailbox);
# Construct the Search QuERY
-
+ $ss = sqimap_session_id();
if (isset($languages[$squirrelmail_language]["CHARSET"]) && $languages[$squirrelmail_language]["CHARSET"]) {
- $ss = "a001 SEARCH CHARSET ".$languages[$squirrelmail_language]["CHARSET"]." ALL $search_where \"$search_what\"\r\n";
+ $ss = " SEARCH CHARSET ".$languages[$squirrelmail_language]["CHARSET"]." ALL $search_where \"$search_what\"\r\n";
} else {
- $ss = "a001 SEARCH ALL $search_where \"$search_what\"\r\n";
+ $ss = " SEARCH ALL $search_where \"$search_what\"\r\n";
}
fputs($imapConnection,$ss);
# Read Data Back From IMAP
- $readin = sqimap_read_data ($imapConnection, "a001", false, $result, $message);
+ $readin = sqimap_read_data ($imapConnection, sqimap_session_id(), false, $result, $message);
if (isset($languages[$squirrelmail_language]["CHARSET"]) && strtolower($result) == "no") {
- $ss = "a001 SEARCH CHARSET \"US-ASCII\" ALL $search_where \"$search_what\"\r\n";
+ $ss = sqimap_session_id() . " SEARCH CHARSET \"US-ASCII\" ALL $search_where \"$search_what\"\r\n";
fputs ($imapConnection, $ss);
- $readin = sqimap_read_data ($imapConnection, "a001", true, $result, $message);
+ $readin = sqimap_read_data ($imapConnection, sqimap_session_id(), true, $result, $message);
}
unset($messagelist); $msgs=""; $c = 0;
sqimap_messages_flag ($imap_stream, $header->id, $header->id, "Seen");
$id = $header->id;
- fputs ($imap_stream, "a001 FETCH $id BODYSTRUCTURE\r\n");
+ fputs ($imap_stream, sqimap_session_id() . " FETCH $id BODYSTRUCTURE\r\n");
//
// This should use sqimap_read_data instead of reading it itself
//
+ $sid = sqimap_session_id();
+ $lsid = strlen( $sid );
$read = fgets ($imap_stream, 10000);
- $response = substr($read, 0, 4);
$bodystructure = "";
- while ($response != 'a001' ) && !feof( $imap_stream ) {
+ while( substr($read, 0, $lsid) <> $sid && !feof( $imap_stream ) ) {
$bodystructure .= $read;
$read = fgets ($imap_stream, 10000);
- $response = substr($read, 0, 4);
}
$read = $bodystructure;
// that it is the first one. That is usually the case anyway.
if (!$ent_id) $ent_id = 1;
- fputs ($imap_stream, "a010 FETCH $id BODY[$ent_id]\r\n");
- $data = sqimap_read_data ($imap_stream, 'a010', true, $response, $message);
+ fputs ($imap_stream, sqimap_session_id() . " FETCH $id BODY[$ent_id]\r\n");
+ $data = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
$topline = array_shift($data);
while (! ereg('\\* [0-9]+ FETCH ', $topline) && $data)
$topline = array_shift($data);
return $regs[1];
}
- $str = "Body retrieval error. Please report this bug!\n";
- $str .= "Response: $response\n";
- $str .= "Message: $message\n";
- $str .= "FETCH line: $topline";
- $str .= "---------------\n$wholemessage";
- foreach ($data as $d)
- {
+ $str = "Body retrieval error. Please report this bug!\n" .
+ "Response: $response\n" .
+ "Message: $message\n" .
+ "FETCH line: $topline" .
+ "---------------\n$wholemessage";
+ foreach ($data as $d) {
$str .= htmlspecialchars($d) . "\n";
}
return $str;
// and it would take over 30 seconds to download it.
set_time_limit(0);
- fputs ($imap_stream, "a001 FETCH $id BODY[$ent_id]\r\n");
+ fputs ($imap_stream, sqimap_session_id() . " FETCH $id BODY[$ent_id]\r\n");
$cnt = 0;
$continue = true;
$read = fgets ($imap_stream,4096);
- // This could be bad -- if the section has 'a001 OK'
+ // This could be bad -- if the section has sqimap_session_id() . ' OK'
// or similar, it will kill the download.
- while (!ereg("^a001 (OK|BAD|NO)(.*)$", $read, $regs)) {
+ while (!ereg("^" . sqimap_session_id() . " (OK|BAD|NO)(.*)$", $read, $regs)) {
if (trim($read) == ")==") {
$read1 = $read;
$read = fgets ($imap_stream,4096);
- if (ereg("^a001 (OK|BAD|NO)(.*)$", $read, $regs)) {
+ if (ereg("^" . sqimap_session_id() . " (OK|BAD|NO)(.*)$", $read, $regs)) {
return;
} else {
- echo decodeBody($read1, $encoding);
- echo decodeBody($read, $encoding);
+ echo decodeBody($read1, $encoding) .
+ decodeBody($read, $encoding);
}
} else if ($cnt) {
echo decodeBody($read, $encoding);