public static function parseAddresses($addrstr, $useimap = true)
{
$addresses = [];
if ($useimap and function_exists('imap_rfc822_parse_adrlist')) {
//Use this built-in parser if it's available
$list = imap_rfc822_parse_adrlist($addrstr, '');
foreach ($list as $address) {
if ('.SYNTAX-ERROR.' != $address->host) {
if (static::validateAddress($address->mailbox . '@' . $address->host)) {
$addresses[] = ['name' => property_exists($address, 'personal') ? $address->personal : '', 'address' => $address->mailbox . '@' . $address->host];
}
}
}
} else {
//Use this simpler parser
$list = explode(',', $addrstr);
foreach ($list as $address) {
$address = trim($address);
//Is there a separate name part?
if (strpos($address, '<') === false) {
//No separate name, just use the whole thing
if (static::validateAddress($address)) {
$addresses[] = ['name' => '', 'address' => $address];
}
} else {
list($name, $email) = explode('<', $address);
$email = trim(str_replace('>', '', $email));
if (static::validateAddress($email)) {
$addresses[] = ['name' => trim(str_replace(['"', "'"], '', $name)), 'address' => $email];
}
}
}
}
return $addresses;
}