src/Util.php
public static function parse_email($str, $separator = ",") {

        $str = trim(preg_replace('/\s+/', ' ', $str));
        $all = [];
        $emails = preg_split('/(".*?"\s*<.+?>)\s*' . $separator . '*|' . $separator . '+/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
        foreach ($emails as $email) {
            $name = "";
            $email = trim($email);
            $email_info = new stdClass;
            if (preg_match('/(.*?)<(.*)>/', $email, $regs)) {
                $email_info->name = trim(trim($regs[1]) , '"');
                $email_info->email = trim($regs[2]);
            } else {
                $email_info->name = $email;
                $email_info->email = $email;
            }

            if (strpos($email_info->email, $separator) !== false) {
                $addtl_emails = parse_email($email_info->email, $separator);
                foreach ($addtl_emails as $addtl_email_info) {
                    if ($addtl_email_info->name == "" || $addtl_email_info->name == $addtl_email_info->email) $addtl_email_info->name = $email_info->name;

                    $all[] = $addtl_email_info;
                }
            } else {
                if (filter_var($email_info->email, FILTER_VALIDATE_EMAIL)) $all[] = $email_info;
            }
        }
        return $all;
    }
public static function parse_email($str, $separator = ",") {

        $str = trim(preg_replace('/\s+/', ' ', $str));
        $all = [];
        $emails = preg_split('/(".*?"\s*<.+?>)\s*' . $separator . '*|' . $separator . '+/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
        foreach ($emails as $email) {
            $name = "";
            $email = trim($email);
            $email_info = new stdClass;
            if (preg_match('/(.*?)<(.*)>/', $email, $regs)) {
                $email_info->name = trim(trim($regs[1]) , '"');
                $email_info->email = trim($regs[2]);
            } else {
                $email_info->name = $email;
                $email_info->email = $email;
            }

            if (strpos($email_info->email, $separator) !== false) {
                $addtl_emails = parse_email($email_info->email, $separator);
                foreach ($addtl_emails as $addtl_email_info) {
                    if ($addtl_email_info->name == "" || $addtl_email_info->name == $addtl_email_info->email) $addtl_email_info->name = $email_info->name;

                    $all[] = $addtl_email_info;
                }
            } else {
                if (filter_var($email_info->email, FILTER_VALIDATE_EMAIL)) $all[] = $email_info;
            }
        }
        return $all;
    }
public static function parse_email ( $ str , $ separator = "," ) { $ str = trim ( preg_replace ( '/\s+/' , ' ' , $ str ) ) ; $ all = [ ] ; $ emails = preg_split ( '/(".*?"\s*<.+?>)\s*' . $ separator . '*|' . $ separator . '+/' , $ str , - 1 , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY ) ; foreach ( $ emails as $ email ) { $ name = "" ; $ email = trim ( $ email ) ; $ email_info = new stdClass ; if ( preg_match ( '/(.*?)<(.*)>/' , $ email , $ regs ) ) { $ email_info -> name = trim ( trim ( $ regs [ 1 ] ) , '"' ) ; $ email_info -> email = trim ( $ regs [ 2 ] ) ; } else { $ email_info -> name = $ email ; $ email_info -> email = $ email ; } if ( strpos ( $ email_info -> email , $ separator ) !== false ) { $ addtl_emails = parse_email ( $ email_info -> email , $ separator ) ; foreach ( $ addtl_emails as $ addtl_email_info ) { if ( $ addtl_email_info -> name == "" || $ addtl_email_info -> name == $ addtl_email_info -> email ) $ addtl_email_info -> name = $ email_info -> name ; $ all [ ] = $ addtl_email_info ; } } else { if ( filter_var ( $ email_info -> email , FILTER_VALIDATE_EMAIL ) ) $ all [ ] = $ email_info ; } } return $ all ; }
Parse email address string
@param  string $str       string input
@param  string $separator separator, default ","
@return array             array
Parse email address string