}
} elseif ($imap_auth_mech == 'login') {
// Original IMAP login code
- $query = 'LOGIN "' . quoteIMAP($username) . '" "' . quoteIMAP($password) . '"';
+ $query = 'LOGIN "' . quoteimap($username) . '" "' . quoteimap($password) . '"';
$read = sqimap_run_command ($imap_stream, $query, false, $response, $message);
} elseif ($imap_auth_mech == 'plain') {
/* Replace this with SASL PLAIN if it ever gets implemented */
}
-function parseAddress($address, $max=0, $addr_ar = array(), $group = '', $host='') {
+function parseAddress($address, $max=0, $addr_ar = array(), $group = '', $host='', $limit=0) {
$pos = 0;
$j = strlen($address);
$personal = '';
$addr = '';
$comment = '';
- if ($max && $max = count($addr_ar)) {
+ if ($max && $max == count($addr_ar)) {
return $addr_ar;
}
while ($pos < $j) {
- if ($max && $max = count($addr_ar)) {
+ if ($max && $max == count($addr_ar)) {
return $addr_ar;
}
$char = $address{$pos};
switch ($char) {
case '=':
+ /* check if it is an encoded string */
if (preg_match('/^(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)(.*)/Ui',substr($address,$pos),$reg)) {
- $personal = $reg[1];
- $pos += strlen($personal);
- }
- ++$pos;
+ /* add stringpart before the encoded string to the personal var */
+ if (!$personal) {
+ $personal = substr($address,0,$pos);
+ }
+ $personal .= $reg[1];
+ $pos += strlen($reg[1]);
+ } else {
+ ++$pos;
+ }
break;
case '"': /* get the personal name */
++$pos;
case '<': /* get email address */
$addr_start = $pos;
$addr_end = strpos($address,'>',$addr_start);
- $addr = substr($address,$addr_start+1,$addr_end-$addr_start-1);
- $pos = $addr_end+1;
+ if($addr_end === FALSE) {
+ // in case the address doesn't end, prevent loop
+ $pos++;
+ } else {
+ $addr = substr($address,$addr_start+1,$addr_end-$addr_start-1);
+ $pos = $addr_end+1;
+ }
break;
case '(': /* rip off comments */
$addr_start = $pos;
$j = strlen($address);
$pos = $addr_start + 1;
break;
+ case ';': /* we reached a non rfc2822 compliant delimiter */
+ if ($group) {
+ $address = substr($address, 0, $pos - 1);
+ ++$pos;
+ break;
+ }
case ',': /* we reached a delimiter */
if ($addr == '') {
$addr = substr($address, 0, $pos);
$j = strlen($address);
$group = '';
break;
- case ';':
- if ($group) {
- $address = substr($address, 0, $pos - 1);
- }
- ++$pos;
- break;
default:
++$pos;
break;