我们一直在使用PEAR Mail,但由于这已经维护了一段时间,我想转而使用PHPmailer。我们有一个现有的电子邮件类,它包装了实际的邮件程序,因此到目前为止,转换看起来并不太难。
我遇到的问题是我们现有的sendEmail方法希望电子邮件地址为
之类的字符串 display name <address@domain.tld>, another display name <address2@domain.tld>
PHPmailer依次获取每个地址,并将地址和显示名称作为单独的参数传递,例如:
$mail->addAddress('address@domain.tld','display name');
我需要一个例程来解析旧样式地址并从显示名称中分离出地址;我可以写这个,但我不想重新发明轮子,我不认为我可以成为遇到这个问题的第一个人(虽然我的搜索未能找到现有的解决方案)
有人能指出我现有的解决方案吗?
编辑,因为我已经颠倒了显示名称详细信息
答案 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);
}
的回复中找到了这个