Мы используем 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, чтобы получить адрес электронной почты из строки почтового ящика