Example #1
0
/**
 * 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;
}