}
-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)) {
+ /* add stringpart before the encoded string to the personal var */
if (!$personal) {
$personal = substr($address,0,$pos);
}
$personal .= $reg[1];
- $pos += strlen($personal);
- }
- ++$pos;
+ $pos += strlen($reg[1]);
+ } else {
+ ++$pos;
+ }
break;
case '"': /* get the personal name */
++$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;
if (handleAsSent($mailbox)) {
$msg['FROM'] = $msg['TO'];
}
- $msg['FROM'] = parseAddress($msg['FROM']);
+ $msg['FROM'] = parseAddress($msg['FROM'],1);
/*
* This is done in case you're looking into Sent folders,