/** * parseRFC822Address: function for parsing RFC822 email address strings and store * them in an address array * * @param string $address The email address string to parse * @param integer $iLimit stop on $iLimit parsed addresses * @public * @author Marc Groot Koerkamp * **/ function parseRFC822Address($sAddress, $iLimit = 0) { $aTokens = _getAddressTokens($sAddress); $sPersonal = $sEmail = $sComment = $sGroup = ''; $aStack = $aComment = $aAddress = array(); foreach ($aTokens as $sToken) { if ($iLimit && $iLimit == count($aAddress)) { return $aAddress; } $cChar = $sToken[0]; switch ($cChar) { case '=': case '"': case ' ': $aStack[] = $sToken; break; case '(': $aComment[] = substr($sToken, 1, -1); break; case ';': if ($sGroup) { $aAddress[] = _createAddressElement($aStack, $aComment, $sEmail); $aAddr = end($aAddress); if (!$aAddr || isset($aAddr) && !$aAddr[SQM_ADDR_MAILBOX] && !$aAddr[SQM_ADDR_PERSONAL]) { $sEmail = $sGroup . ':;'; } $aAddress[] = _createAddressElement($aStack, $aComment, $sEmail); $sGroup = ''; $aStack = $aComment = array(); break; } case ',': $aAddress[] = _createAddressElement($aStack, $aComment, $sEmail); break; case ':': $sGroup = trim(implode(' ', $aStack)); $sGroup = preg_replace('/\\s+/', ' ', $sGroup); $aStack = array(); break; case '<': $sEmail = trim(substr($sToken, 1, -1)); break; case '>': /* skip */ break; default: $aStack[] = $sToken; break; } } /* now do the action again for the last address */ $aAddress[] = _createAddressElement($aStack, $aComment, $sEmail); return $aAddress; }
/** * parseRFC822Address: function for parsing RFC822 email address strings and store * them in an address array * * @param string $address The email address string to parse * @param array $aProps associative array with properties * @public * @author Marc Groot Koerkamp * **/ function parseRFC822Address($sAddress, $aProps) { // $aPropsDefault = array ( // 'domain' => '', // // 'limit' => 0, // limits returned addresses // 'abooklookup' => false); // callback function for addressbook lookup // // $aProps = is_array($aProps) ? array_merge($aPropsDefault,$aProps) : $aPropsDefault; // $cbLookup = $aProps['abooklookup']; // $sDomain = $aProps['domain']; $iLimit = $aProps['limit']; $aTokens = _getAddressTokens($sAddress); $sPersonal = $sEmail = $sComment = $sGroup = ''; $aStack = $aComment = $aAddress = array(); foreach ($aTokens as $sToken) { if ($iLimit && $iLimit == count($aAddress)) { return $aAddress; } $cChar = $sToken[0]; switch ($cChar) { case '=': case '"': case ' ': $aStack[] = $sToken; break; case '(': $aComment[] = substr($sToken, 1, -1); break; case ';': if ($sGroup) { $aAddress[] = _createAddressElement($aStack, $aComment, $sEmail); $oAddr = end($aAddress); if (!$oAddr || isset($oAddr) && !$oAddr->mailbox && !$oAddr->personal) { $sEmail = $sGroup . ':;'; } $aAddress[] = _createAddressElement($aStack, $aComment, $sEmail); $sGroup = ''; $aStack = $aComment = array(); break; } case ',': $aAddress[] = _createAddressElement($aStack, $aComment, $sEmail); break; case ':': $sGroup = trim(implode(' ', $aStack)); $sGroup = preg_replace('/\\s+/', ' ', $sGroup); $aStack = array(); break; case '<': $sEmail = trim(substr($sToken, 1, -1)); break; case '>': /* skip */ break; default: $aStack[] = $sToken; break; } } /* now do the action again for the last address */ $aAddress[] = _createAddressElement($aStack, $aComment, $sEmail); return $aAddress; }