+ $pos = $j;
+ }
+ }
+ $addr_start = $pos;
+ break;
+ case '<': /* get email address */
+ $addr_start = $pos;
+ $addr_end = strpos($address,'>',$addr_start);
+ $addr = substr($address,$addr_start+1,$addr_end-$addr_start-1);
+ if ($addr_end) {
+ $pos = $addr_end+1;
+ } else {
+ $addr = substr($address,$addr_start+1);
+ $pos = $j;
+ }
+ break;
+ case '(': /* rip off comments */
+ $addr_start = $pos;
+ $pos = strpos($address,')');
+ if ($pos !== false) {
+ $comment = substr($address, $addr_start+1,($pos-$addr_start-1));
+ $address_start = substr($address, 0, $addr_start);
+ $address_end = substr($address, $pos + 1);
+ $address = $address_start . $address_end;
+ }
+ $j = strlen($address);
+ $pos = $addr_start + 1;
+ break;
+ case ',': /* we reached a delimiter */
+ if (!$name && !$addr) {
+ $addr = substr($address, 0, $pos);
+ } else if (!$addr) {
+ $addr = trim(substr($address, $addr_start, $pos));
+ } else if ($name == '') {
+ $name = trim(substr($address, 0, $addr_start));
+ }
+ $at = strpos($addr, '@');
+ $addr_structure = new AddressStructure();
+ if (!$name && $comment) $name = $comment;
+ if (!$is_encoded) {
+ $addr_structure->personal = encodeHeader($name);
+ } else {
+ $addr_structure->personal = $name;
+ }
+ $is_encoded = false;
+ $addr_structure->group = $group;
+ if ($at) {
+ $addr_structure->mailbox = substr($addr, 0, $at);
+ $addr_structure->host = substr($addr, $at+1);
+ } else {
+ /* if lookup function */
+ if ($lookup) {
+ $aAddr = call_user_func_array($lookup,array($addr));
+ if (isset($aAddr['email'])) {
+ $at = strpos($aAddr['email'], '@');
+ $addr_structure->mailbox = substr($aAddr['email'], 0, $at);
+ $addr_structure->host = substr($aAddr['email'], $at+1);
+ if (isset($aAddr['name'])) {
+ $addr_structure->personal = $aAddr['name'];
+ } else {
+ $addr_structure->personal = encodeHeader($addr);