将名称 <address@domain.tld> 中的地址转换为 phpmailer 格式

Convert addresses from name <address@domain.tld> to phpmailer format

我们一直在使用 PEAR Mail,但由于它已经有一段时间没有维护了,所以我想改为转换为 PHPmailer。我们有一个现有的电子邮件 class,它包装了实际的邮件程序,因此到目前为止转换看起来并不困难。

我 运行 遇到的问题是我们现有的 sendEmail 方法需要电子邮件地址作为字符串,例如

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

而 PHPmailer 依次获取每个地址并将地址和显示名称作为单独的参数传递,例如:

$mail->addAddress('address@domain.tld','display 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 对 Get email address from mailbox string

的回复中找到了这个

我一直想解决这个问题,因为它已经在 PHPMailer 问题队列中等待了几年,所以我终于做了一些事情。

In HEAD on 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']);
}