Преобразование адресов из имени <address@domain.tld> в формат phpmailer

Мы используем PEAR Mail, но поскольку это не поддерживается некоторое время, я хочу конвертировать в PHPmailer. У нас есть существующий класс электронной почты, который обертывает фактическую почтовую программу, поэтому преобразование не выглядит слишком сложным до сих пор.

Проблема, с которой я столкнулся, заключается в том, что наш существующий метод sendEmail ожидает адреса электронной почты в виде строки, например

display name <address@domain.tld>, another display name <address2@domain.tld> 

В то время как PHPmailer берет каждый адрес по очереди и передает адрес и отображаемое имя в виде отдельных параметров, например:

 $mail->addAddress('address@domain.tld','display name'); 

Мне нужна рутина для анализа старых адресов стиля и выделения адресов из отображаемых имен; Я могу написать это, но я не хочу изобретать колесо, и я не думаю, что я могу быть первым человеком, который столкнулся с этой проблемой (хотя в моем поиске не было найдено существующего решения).

Может ли кто-нибудь указать мне на существующее решение?

Отредактировано, потому что я изменил данные отображаемого имени

Я собирался немного подойти к этому, так как он сидит в очереди на вызовы PHPMailer в течение нескольких лет, поэтому я, наконец, что-то с этим поделал.

В HEAD на GitHub или PHPMailer 5.2.11, когда он выпущен, вы можете сделать это:

 $a = 'Joe User <joe@example.com>, Jill User <jill@example.net>'; foreach ($mail->parseAddresses($a) as $address) { $mail->addAddress($address['address'], $address['name']); } 

Вот пример

 $str = 'display name <address@domain.tld>, another display name <address2@domain.tld>'; $targets = explode( ',', $str ); foreach( $targets as $target ) { list( $name, $email ) = explode( '<', $targert ); $name = trim( $name ); $email = str_replace( '>', '', $email ); $mail->addAddress( $email, $name ); } 

Спасибо @ A.Blub, но я думаю, что следующее немного более аккуратное решение. он использует встроенную функцию PHP, о которой я раньше не знал;

  if (!empty($to)) { $address_array = imap_rfc822_parse_adrlist($to, 'example.com'); foreach ($address_array as $id => $address) $mail->addAddress($address->mailbox . '@' . $address->host, $address->personal); } 

Я нашел это в ответе @Gumbo, чтобы получить адрес электронной почты из строки почтового ящика