function sqimap_run_command($imap_stream, $query, $handle_errors, &$response, &$message, $unique_id = false, $filter = false, $outputstream = false, $no_return = false) { if ($imap_stream) { $sid = sqimap_session_id($unique_id); fputs($imap_stream, $sid . ' ' . $query . "\r\n"); $read = sqimap_read_data($imap_stream, $sid, $handle_errors, $response, $message, $query, $filter, $outputstream, $no_return); return $read; } else { echo date("d.m.Y @ G:i:s") . ": ERROR: No available IMAP stream.\n"; return false; } }
function get_mailer() { global $imapConnection, $passed_id, $color; fputs($imapConnection, "a001 FETCH {$passed_id} BODY.PEEK[HEADER.FIELDS (X-Mailer)]\r\n"); $read = sqimap_read_data($imapConnection, "a001", true, $response, $message); $mailer = substr($read[1], strpos($read[1], " ")); if (trim($mailer)) { echo " <TR>\n"; echo " <TD BGCOLOR=\"{$color['0']}\" WIDTH=15% ALIGN=RIGHT VALIGN=TOP>\n"; echo "Mailer:"; echo " </TD><TD BGCOLOR=\"{$color['0']}\" WIDTH=85% VALIGN=TOP colspan=2>\n"; echo " <B>{$mailer}</B>\n"; echo " </TD>\n"; echo " </TR>\n"; } }
function sqimap_get_delimiter($imap_stream = false) { global $sqimap_delimiter, $optional_delimiter; /* Use configured delimiter if set */ if (!empty($optional_delimiter) && $optional_delimiter != 'detect') { return $optional_delimiter; } /* Do some caching here */ 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... */ $read = sqimap_run_command($imap_stream, 'NAMESPACE', 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); if (isset($lst[3])) { $pn[$lst[1]] = $lst[3]; } else { $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; }
function get_thread_sort($imap_stream) { global $thread_new, $sort_by_ref, $default_charset, $server_sort_array, $uid_support; if (sqsession_is_registered('thread_new')) { sqsession_unregister('thread_new'); } if (sqsession_is_registered('server_sort_array')) { sqsession_unregister('server_sort_array'); } $sid = sqimap_session_id($uid_support); $thread_temp = array(); if ($sort_by_ref == 1) { $sort_type = 'REFERENCES'; } else { $sort_type = 'ORDEREDSUBJECT'; } $thread_query = "{$sid} THREAD {$sort_type} " . strtoupper($default_charset) . " ALL\r\n"; fputs($imap_stream, $thread_query); $thread_test = sqimap_read_data($imap_stream, $sid, false, $response, $message); if (isset($thread_test[0])) { if (preg_match("/^\\* THREAD (.+)\$/", $thread_test[0], $regs)) { $thread_list = trim($regs[1]); } } else { $thread_list = ""; } if (!preg_match("/OK/", $response)) { $server_sort_array = 'no'; return $server_sort_array; } if (isset($thread_list)) { $thread_temp = preg_split("//", $thread_list, -1, PREG_SPLIT_NO_EMPTY); } $char_count = count($thread_temp); $counter = 0; $thread_new = array(); $k = 0; $thread_new[0] = ""; for ($i = 0; $i < $char_count; $i++) { if ($thread_temp[$i] != ')' && $thread_temp[$i] != '(') { $thread_new[$k] = $thread_new[$k] . $thread_temp[$i]; } elseif ($thread_temp[$i] == '(') { $thread_new[$k] .= $thread_temp[$i]; $counter++; } elseif ($thread_temp[$i] == ')') { if ($counter > 1) { $thread_new[$k] .= $thread_temp[$i]; $counter = $counter - 1; } else { $thread_new[$k] .= $thread_temp[$i]; $k++; $thread_new[$k] = ""; $counter = $counter - 1; } } } sqsession_register($thread_new, 'thread_new'); $thread_new = array_reverse($thread_new); $thread_list = implode(" ", $thread_new); $thread_list = str_replace("(", " ", $thread_list); $thread_list = str_replace(")", " ", $thread_list); $thread_list = preg_split("/\\s/", $thread_list, -1, PREG_SPLIT_NO_EMPTY); $server_sort_array = $thread_list; sqsession_register($server_sort_array, 'server_sort_array'); return $thread_list; }
setPref($data_dir, $username, "mailfetch_uidl_{$i_loop}", $mailfetch_uidl[$i - 1]); continue; } Mail_Fetch_Status(_("Refetching message ") . "{$i}"); $MessArray = $pop3->get($i); } // end while while (list($lineNum, $line) = each($MessArray)) { $Message .= $line; } fputs($imap_stream, "A3{$i} APPEND \"{$mailfetch_subfolder}\" {" . strlen($Message) . "}\r\n"); $Line = fgets($imap_stream, 1024); if (substr($Line, 0, 1) == '+') { fputs($imap_stream, $Message); fputs($imap_stream, "\r\n"); sqimap_read_data($imap_stream, "A3{$i}", false, $response, $message); if ($response != 'OK') { Mail_Fetch_Status(_("Error Appending Message!") . " " . $message); Mail_Fetch_Status(_("Closing POP")); $pop3->quit(); Mail_Fetch_Status(_("Logging out from IMAP")); sqimap_logout($imap_stream); Mail_Fetch_Status(_("Saving UIDL")); setPref($data_dir, $username, "mailfetch_uidl_{$i_loop}", $mailfetch_uidl[$i - 1]); exit; } else { Mail_Fetch_Status(_("Message appended to mailbox")); } if ($mailfetch_lmos != 'on') { if ($pop3->delete($i)) { Mail_Fetch_Status(sprintf(_("Message %d deleted from remote server!"), $i));
function mail_fetch_login() { require_once SM_PATH . 'include/validate.php'; include_once SM_PATH . 'functions/imap.php'; require_once SM_PATH . 'plugins/mail_fetch/class.POP3.php'; require_once SM_PATH . 'plugins/mail_fetch/functions.php'; global $data_dir, $imapServerAddress, $imapPort; sqgetGlobalVar('username', $username, SQ_SESSION); sqgetGlobalVar('key', $key, SQ_COOKIE); $mailfetch_newlog = getPref($data_dir, $username, 'mailfetch_newlog'); $outMsg = ''; $mailfetch_server_number = getPref($data_dir, $username, 'mailfetch_server_number'); if (!isset($mailfetch_server_number)) { $mailfetch_server_number = 0; } $mailfetch_cypher = getPref($data_dir, $username, 'mailfetch_cypher'); if ($mailfetch_server_number < 1) { $mailfetch_server_number = 0; } for ($i_loop = 0; $i_loop < $mailfetch_server_number; $i_loop++) { $mailfetch_login_[$i_loop] = getPref($data_dir, $username, "mailfetch_login_{$i_loop}"); $mailfetch_fref_[$i_loop] = getPref($data_dir, $username, "mailfetch_fref_{$i_loop}"); $mailfetch_pass_[$i_loop] = getPref($data_dir, $username, "mailfetch_pass_{$i_loop}"); if ($mailfetch_cypher == 'on') { $mailfetch_pass_[$i_loop] = decrypt($mailfetch_pass_[$i_loop]); } if ($mailfetch_pass_[$i_loop] != '' && ($mailfetch_login_[$i_loop] == 'on' && $mailfetch_newlog == 'on' || $mailfetch_fref_[$i_loop] == 'on')) { $mailfetch_server_[$i_loop] = getPref($data_dir, $username, "mailfetch_server_{$i_loop}"); $mailfetch_port_[$i_loop] = getPref($data_dir, $username, "mailfetch_port_{$i_loop}"); $mailfetch_alias_[$i_loop] = getPref($data_dir, $username, "mailfetch_alias_{$i_loop}"); $mailfetch_user_[$i_loop] = getPref($data_dir, $username, "mailfetch_user_{$i_loop}"); $mailfetch_lmos_[$i_loop] = getPref($data_dir, $username, "mailfetch_lmos_{$i_loop}"); $mailfetch_uidl_[$i_loop] = getPref($data_dir, $username, "mailfetch_uidl_{$i_loop}"); $mailfetch_subfolder_[$i_loop] = getPref($data_dir, $username, "mailfetch_subfolder_{$i_loop}"); $mailfetch_server = $mailfetch_server_[$i_loop]; $mailfetch_port = $mailfetch_port_[$i_loop]; $mailfetch_user = $mailfetch_user_[$i_loop]; $mailfetch_alias = $mailfetch_alias_[$i_loop]; $mailfetch_pass = $mailfetch_pass_[$i_loop]; $mailfetch_lmos = $mailfetch_lmos_[$i_loop]; $mailfetch_login = $mailfetch_login_[$i_loop]; $mailfetch_uidl = $mailfetch_uidl_[$i_loop]; $mailfetch_subfolder = $mailfetch_subfolder_[$i_loop]; // $outMsg .= "$mailfetch_alias checked<br>"; // $outMsg .= "$mailfetch_alias_[$i_loop]<br>"; $pop3 = new POP3($mailfetch_server, 60); if (!$pop3->connect($mailfetch_server, $mailfetch_port)) { $outMsg .= _("Warning, ") . $pop3->ERROR; continue; } $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 10); $Count = $pop3->login($mailfetch_user, $mailfetch_pass); if (($Count == false || $Count == -1) && $pop3->ERROR != '') { $outMsg .= _("Login Failed:") . $pop3->ERROR; continue; } // register_shutdown_function($pop3->quit()); $msglist = $pop3->uidl(); $i = 1; for ($j = 1; $j < sizeof($msglist); $j++) { if ($msglist["{$j}"] == $mailfetch_uidl) { $i = $j + 1; break; } } if ($Count < $i) { $pop3->quit(); continue; } if ($Count == 0) { $pop3->quit(); continue; } else { $newmsgcount = $Count - $i + 1; } // Faster to get them all at once $mailfetch_uidl = $pop3->uidl(); if (!is_array($mailfetch_uidl) && $mailfetch_lmos == 'on') { $outMsg .= _("Server does not support UIDL."); } for (; $i <= $Count; $i++) { if (!ini_get('safe_mode')) { set_time_limit(20); } // 20 seconds per message max $Message = ""; $MessArray = $pop3->get($i); if (!$MessArray or gettype($MessArray) != "array") { $outMsg .= _("Warning, ") . $pop3->ERROR; continue 2; } while (list($lineNum, $line) = each($MessArray)) { $Message .= $line; } /** * check if mail folder is not null and subscribed * Function can check if mail folder is only unsubscribed * and use unsubscribed mail folder. */ if ($mailfetch_subfolder == '' || !mail_fetch_check_folder($imap_stream, $mailfetch_subfolder)) { fputs($imap_stream, "A3{$i} APPEND INBOX {" . strlen($Message) . "}\r\n"); } else { fputs($imap_stream, "A3{$i} APPEND {$mailfetch_subfolder} {" . strlen($Message) . "}\r\n"); } $Line = fgets($imap_stream, 1024); if (substr($Line, 0, 1) == '+') { fputs($imap_stream, $Message); fputs($imap_stream, "\r\n"); sqimap_read_data($imap_stream, "A3{$i}", false, $response, $message); if ($mailfetch_lmos != 'on') { $pop3->delete($i); } } else { echo "{$Line}"; $outMsg .= _("Error Appending Message!"); } } $pop3->quit(); sqimap_logout($imap_stream); if (is_array($mailfetch_uidl)) { setPref($data_dir, $username, "mailfetch_uidl_{$i_loop}", array_pop($mailfetch_uidl)); } } } if (trim($outMsg) != '') { echo '<br><font size="1">' . _("Mail Fetch Result:") . "<br>{$outMsg}</font>"; } if ($mailfetch_newlog == 'on') { setPref($data_dir, $username, 'mailfetch_newlog', 'off'); } }
/** * Returns a list of all folders, subscribed or not */ function sqimap_mailbox_list_all($imap_stream) { global $list_special_folders_first, $folder_prefix, $delimiter; $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'; $fld_pre_length = strlen($folder_prefix); for ($i = 0, $cnt = count($read_ary); $i < $cnt; $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, $lsid) != $ssid) { /* Store the raw IMAP reply */ $boxes[$g]['raw'] = $read_ary[$i]; /* Count number of delimiters ($delimiter) in folder name */ $mailbox = find_mailbox_name($read_ary[$i]); $dm_count = substr_count($mailbox, $delimiter); if (substr($mailbox, -1) == $delimiter) { /* If name ends in delimiter - decrement count by one */ $dm_count--; } /* Format folder name, but only if it's a INBOX.* or has a parent. */ $boxesallbyname[$mailbox] = $g; $parentfolder = readMailboxParent($mailbox, $delimiter); if (eregi('^inbox' . quotemeta($delimiter), $mailbox) || ereg('^' . $folder_prefix, $mailbox) || isset($boxesallbyname[$parentfolder]) && strlen($parentfolder) > 0) { if ($dm_count) { $boxes[$g]['formatted'] = str_repeat(' ', $dm_count); } else { $boxes[$g]['formatted'] = ''; } $boxes[$g]['formatted'] .= imap_utf7_decode_local(readShortMailboxName($mailbox, $delimiter)); } else { $boxes[$g]['formatted'] = imap_utf7_decode_local($mailbox); } $boxes[$g]['unformatted-dm'] = $mailbox; if (substr($mailbox, -1) == $delimiter) { $mailbox = substr($mailbox, 0, strlen($mailbox) - 1); } $boxes[$g]['unformatted'] = $mailbox; $boxes[$g]['unformatted-disp'] = substr($mailbox, $fld_pre_length); $boxes[$g]['id'] = $g; /* Now lets get the flags for this mailbox */ $read_mlbx = $read_ary[$i]; // $read_mlbx = sqimap_run_command ($imap_stream, "LIST \"\" \"$mailbox\"", // 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]; // } // echo $read_mlbx[0] .' raw 2 <br>'; $flags = substr($read_mlbx, strpos($read_mlbx, '(') + 1); $flags = substr($flags, 0, strpos($flags, ')')); $flags = str_replace('\\', '', $flags); $flags = trim(strtolower($flags)); if ($flags) { $boxes[$g]['flags'] = explode(' ', $flags); } else { $boxes[$g]['flags'] = array(); } } $g++; } if (is_array($boxes)) { sort($boxes); } return $boxes; }
/** * Internal function used to fetch pop3 mails on login * @since 1.5.1 * @private */ function mail_fetch_login_function() { include_once SM_PATH . 'functions/imap_general.php'; global $username, $data_dir, $imapServerAddress, $imapPort, $imap_stream_options; $mailfetch_newlog = getPref($data_dir, $username, 'mailfetch_newlog'); $outMsg = ''; $mailfetch_server_number = getPref($data_dir, $username, 'mailfetch_server_number'); if (!isset($mailfetch_server_number)) { $mailfetch_server_number = 0; } $mailfetch_cypher = getPref($data_dir, $username, 'mailfetch_cypher'); if ($mailfetch_server_number < 1) { $mailfetch_server_number = 0; } for ($i_loop = 0; $i_loop < $mailfetch_server_number; $i_loop++) { $mailfetch_login_[$i_loop] = getPref($data_dir, $username, "mailfetch_login_{$i_loop}"); $mailfetch_fref_[$i_loop] = getPref($data_dir, $username, "mailfetch_fref_{$i_loop}"); $mailfetch_pass_[$i_loop] = getPref($data_dir, $username, "mailfetch_pass_{$i_loop}"); if ($mailfetch_cypher == 'on') { $mailfetch_pass_[$i_loop] = decrypt($mailfetch_pass_[$i_loop]); } if ($mailfetch_pass_[$i_loop] != '' && ($mailfetch_login_[$i_loop] == 'on' && $mailfetch_newlog == 'on' || $mailfetch_fref_[$i_loop] == 'on')) { // What the heck $mailfetch_server_[$i_loop] = getPref($data_dir, $username, "mailfetch_server_{$i_loop}"); $mailfetch_port_[$i_loop] = getPref($data_dir, $username, "mailfetch_port_{$i_loop}"); $mailfetch_alias_[$i_loop] = getPref($data_dir, $username, "mailfetch_alias_{$i_loop}"); $mailfetch_user_[$i_loop] = getPref($data_dir, $username, "mailfetch_user_{$i_loop}"); $mailfetch_lmos_[$i_loop] = getPref($data_dir, $username, "mailfetch_lmos_{$i_loop}"); $mailfetch_uidl_[$i_loop] = getPref($data_dir, $username, "mailfetch_uidl_{$i_loop}"); $mailfetch_subfolder_[$i_loop] = getPref($data_dir, $username, "mailfetch_subfolder_{$i_loop}"); $mailfetch_auth_[$i_loop] = getPref($data_dir, $username, "mailfetch_auth_{$i_loop}", MAIL_FETCH_AUTH_USER); $mailfetch_type_[$i_loop] = getPref($data_dir, $username, "mailfetch_type_{$i_loop}", MAIL_FETCH_USE_PLAIN); $mailfetch_server = $mailfetch_server_[$i_loop]; $mailfetch_port = $mailfetch_port_[$i_loop]; $mailfetch_user = $mailfetch_user_[$i_loop]; $mailfetch_alias = $mailfetch_alias_[$i_loop]; $mailfetch_pass = $mailfetch_pass_[$i_loop]; $mailfetch_lmos = $mailfetch_lmos_[$i_loop]; $mailfetch_login = $mailfetch_login_[$i_loop]; $mailfetch_uidl = $mailfetch_uidl_[$i_loop]; $mailfetch_subfolder = $mailfetch_subfolder_[$i_loop]; $mailfetch_auth = $mailfetch_auth_[$i_loop]; $mailfetch_type = $mailfetch_type_[$i_loop]; // end of what the heck // $outMsg .= "$mailfetch_alias checked<br />"; // $outMsg .= "$mailfetch_alias_[$i_loop]<br />"; // FIXME: duplicate code with different output destination. $pop3 = new mail_fetch(array('host' => $mailfetch_server, 'port' => $mailfetch_port, 'auth' => $mailfetch_auth, 'tls' => $mailfetch_type, 'timeout' => 60)); if (!empty($pop3->error)) { $outMsg .= _("Warning:") . ' ' . $pop3->error; continue; } $imap_stream = sqimap_login($username, false, $imapServerAddress, $imapPort, 10, $imap_stream_options); /* log into pop server*/ if (!$pop3->login($mailfetch_user, $mailfetch_pass)) { $outMsg .= _("Login Failed:") . ' ' . $pop3->error; continue; } $aMsgStat = $pop3->command_stat(); if (is_bool($aMsgStat)) { $outMsg .= _("Can't get mailbox status:") . ' ' . sm_encode_html_special_chars($pop3->error); continue; } $Count = $aMsgStat['count']; $i = 1; if ($Count > 0) { // If we leave messages on server, try using UIDL if ($mailfetch_lmos == 'on') { $msglist = $pop3->command_uidl(); if (is_bool($msglist)) { $outMsg .= _("Server does not support UIDL.") . ' ' . sm_encode_html_special_chars($pop3->error); // User asked to leave messages on server, but we can't do that. $pop3->command_quit(); continue; // $mailfetch_lmos = 'off'; } else { // calculate number of new messages for ($j = 1; $j <= sizeof($msglist); $j++) { // do strict comparison ('1111.10' should not be equal to '1111.100') if ($msglist[$j] === $mailfetch_uidl) { $i = $j + 1; break; } } } } // fetch list of messages with LIST // we can use else control, but we can also set $mailfetch_lmos // to off if server does not support UIDL. if ($mailfetch_lmos != 'on') { $msglist = $pop3->command_list(); } } if ($Count < $i) { $pop3->command_quit(); continue; } if ($Count == 0) { $pop3->command_quit(); continue; } for (; $i <= $Count; $i++) { if (!ini_get('safe_mode')) { set_time_limit(20); } // 20 seconds per message max $Message = $pop3->command_retr($i); if (is_bool($Message)) { $outMsg .= _("Warning:") . ' ' . sm_encode_html_special_chars($pop3->error); continue; } // check if mail folder is not null and subscribed (There is possible issue with /noselect mail folders) if ($mailfetch_subfolder == '' || !mail_fetch_check_folder($imap_stream, $mailfetch_subfolder)) { fputs($imap_stream, "A3{$i} APPEND INBOX {" . strlen($Message) . "}\r\n"); } else { fputs($imap_stream, "A3{$i} APPEND {$mailfetch_subfolder} {" . strlen($Message) . "}\r\n"); } $Line = fgets($imap_stream, 1024); if (substr($Line, 0, 1) == '+') { fputs($imap_stream, $Message); fputs($imap_stream, "\r\n"); sqimap_read_data($imap_stream, "A3{$i}", false, $response, $message); // Check results of append command $response = implode('', $response); $message = implode('', $message); if ($response != 'OK') { $outMsg .= _("Error Appending Message!") . " " . sm_encode_html_special_chars($message); if ($mailfetch_lmos == 'on') { setPref($data_dir, $username, "mailfetch_uidl_{$i_loop}", $msglist[$i - 1]); } // Destroy msg list in order to prevent UIDL update $msglist = false; // if append fails, don't download other messages break; } if ($mailfetch_lmos != 'on') { $pop3->command_dele($i); } } else { echo "{$Line}"; $outMsg .= _("Error Appending Message!"); } } $pop3->command_quit(); sqimap_logout($imap_stream); if ($mailfetch_lmos == 'on' && is_array($msglist)) { setPref($data_dir, $username, "mailfetch_uidl_{$i_loop}", array_pop($msglist)); } } } if (trim($outMsg) != '') { echo '<br /><font size="1">' . _("Mail Fetch Result:") . "<br />{$outMsg}</font>"; } if ($mailfetch_newlog == 'on') { setPref($data_dir, $username, 'mailfetch_newlog', 'off'); } }
/** * Returns the delimiter between mailboxes: INBOX/Test, or INBOX.Test * @param stream $imap_stream * @return string */ function sqimap_get_delimiter($imap_stream = false) { global $sqimap_delimiter, $optional_delimiter; /* Use configured delimiter if set */ if (!empty($optional_delimiter) && $optional_delimiter != 'detect') { return $optional_delimiter; } /* Delimiter is stored in the session from redirect. Try fetching from there first */ if (empty($sqimap_delimiter)) { sqgetGlobalVar('delimiter', $sqimap_delimiter, SQ_SESSION); } /* Do some caching here */ if (!$sqimap_delimiter) { if (sqimap_capability($imap_stream, 'NAMESPACE') && ($read = sqimap_run_command($imap_stream, 'NAMESPACE', true, $a, $b)) && preg_match('/\\* NAMESPACE +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL)/i', $read[0], $data) && preg_match('/^\\( *\\((.*)\\) *\\)/', $data[1], $data2)) { $pn = $data2[1]; $pna = explode(')(', $pn); $delnew = array(); while (list($k, $v) = each($pna)) { $lst = explode('"', $v); if (isset($lst[3])) { $delnew[$lst[1]] = $lst[3]; } else { $delnew[$lst[1]] = ''; } } $sqimap_delimiter = array_shift($delnew); } else { fputs($imap_stream, ". LIST \"INBOX\" \"\"\r\n"); $read = sqimap_read_data($imap_stream, '.', true, $a, $b); $read = $read['.'][0]; //sqimap_read_data() now returns a tag array of response array $quote_position = strpos($read[0], '"'); $sqimap_delimiter = substr($read[0], $quote_position + 1, 1); } } return $sqimap_delimiter; }