Конечно, вы можете просто использовать регулярное выражение в строке, но регулярное выражение жалобы RFC является чудовищным.
Он также потерпит неудачу в маловероятном (но возможном событии) a@b.com <b@a.com>
(если вы действительно не хотите, чтобы оба извлекались в этом случае).
$str = 'John Bo <jboe@gmail.com>, abracadbra@gmail.com, <asking@gmail.com>';
$items = explode(',', $str);
$items = array_map('trim', $items);
$emails = array();
foreach($items as $item) {
preg_match_all('/<(.*?)>/', $item, $matches);
if (empty($matches[1])) {
$emails[] = $item;
continue;
}
$emails[] = $matches[1][0];
}
var_dump($emails);
Ideone .
выход
array(3) {
[0]=>
string(14) "jboe@gmail.com"
[1]=>
string(20) "abracadbra@gmail.com"
[2]=>
string(16) "asking@gmail.com"
}