我可以在SwiftMailer中使用传统的电子邮件“收件人”行吗?

TRi*_*RiG 8 php email swiftmailer

SwiftMailer需要一个电子邮件地址数组,其中可能包含名称作为该数组的值:

$message->setTo([
  'person1@example.org',
  'person2@example.net' => 'Person 2 Name',
  'person3@example.org',
  'person4@example.org',
  'person5@example.org' => 'Person 5 Name'
]);
Run Code Online (Sandbox Code Playgroud)

但是我只有一行文本,形成一个标准的To标题:

person1@example.org, 'Person 2 Name' <person2@example.net>, person3@example.org, person4@example.org, 'Person 5 Name' <person5@example.org>
Run Code Online (Sandbox Code Playgroud)

我可能可以一起破解一些东西,以将To标头转换为数组,但这似乎是标准解决方案的问题,理想情况下,这是来自吸收了RFC并会接受奇怪但有效的电子邮件地址的人,包括那些包含逗号和分号。SwiftMailer本身是否具有此功能?如果是这样,我找不到。

Tom*_*Tom 4

使用 SwiftMailer 的典型 API 的好处->setTo()是地址验证。验证后,SwiftMailer 构建相应的标头并添加它。

/**
 * @var $message Swift_Message
 */
$message = $mailer->createMessage();

$message->setTo([
    'person1@example.org',
    'person2@example.net' => 'Person 2 Name',
    'person3@example.org',
    'person4@example.org',
    'person5@example.org' => 'Person 5 Name'
]);

// String representation of corresponding To header
print_r((string)$message->getHeaders()->get('To'));
Run Code Online (Sandbox Code Playgroud)

其产量:

To: person1@example.org, Person 2 Name <person2@example.net>, person3@example.org, person4@example.org, Person 5 Name <person5@example.org>
Run Code Online (Sandbox Code Playgroud)

可以使用 手动设置标题$message->getHeaders()->addTextHeader()

// Set To text-header manually
$message
    ->getHeaders()
    ->addTextHeader(
        'To', 
        "person1@example.org, 'Person 2 Name' <person2@example.net>, person3@example.org, person4@example.org, 'Person 5 Name' <person5@example.org>"
    );

// String representation of manually set header
print_r((string)$message->getHeaders()->get('To'));
Run Code Online (Sandbox Code Playgroud)

这会产生相同的标头。然而,我个人会尝试从 Swift 的验证中受益。