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

时间:2015-05-21 10:58:28

标签: php phpmailer

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

我遇到的问题是我们现有的sendEmail方法希望电子邮件地址为

之类的字符串
 display name <address@domain.tld>, another display name <address2@domain.tld>

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

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

我需要一个例程来解析旧样式地址并从显示名称中分离出地址;我可以写这个,但我不想重新发明轮子,我不认为我可以成为遇到这个问题的第一个人(虽然我的搜索未能找到现有的解决方案)

有人能指出我现有的解决方案吗?

编辑,因为我已经颠倒了显示名称详细信息

3 个答案:

答案 0 :(得分:3)

我已经意识到要解决这个问题一段时间了,因为它已经在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']);
}

答案 1 :(得分:1)

这是一个例子

$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 );
}

答案 2 :(得分:0)

感谢@ 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

的回复中找到了这个