我可以在 SwiftMailer 中使用传统的电子邮件“收件人”行吗?
Posted
技术标签:
【中文标题】我可以在 SwiftMailer 中使用传统的电子邮件“收件人”行吗?【英文标题】:Can I use a traditional Email "To" line in SwiftMailer? 【发布时间】:2019-12-22 14:52:43 【问题描述】:SwiftMailer 需要一个电子邮件地址数组,可能包括名称作为数组的值:
$message->setTo([
'person1@example.org',
'person2@example.net' => 'Person 2 Name',
'person3@example.org',
'person4@example.org',
'person5@example.org' => 'Person 5 Name'
]);
但我只有一行文本,形成一个标准的To
标头:
person1@example.org, 'Person 2 Name' <person2@example.net>, person3@example.org, person4@example.org, 'Person 5 Name' <person5@example.org>
我可能可以一起破解一些东西以将To
标头转换为数组,但这感觉像是标准解决方案的问题,理想情况下来自吸收了 RFC 并接受奇怪但有效的电子邮件地址的人,包括那些包含逗号和分号的。 SwiftMailer 本身有这个功能吗?如果是这样,我找不到它。
【问题讨论】:
有趣的问题。我很长一段时间没有检查 Swift Mailer 代码,但我认为在提交消息之前它不会构成实际的标题。并且您自己创建自定义标头将不起作用,因为邮件服务器不会在那里搜索实际的收件人(他们必须提前使用特殊的 SMTP 命令提供)。让我们拭目以待,但我怀疑你运气不好。 我曾尝试自己与imap_rfc822_parse_adrlist()
一起破解一些东西,但这很棘手。
【参考方案1】:
使用 SwiftMailer 典型的->setTo()
API 的好处是地址验证。验证后,SwiftMailer 会构建相应的 header 并添加它。
/**
* @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'));
产量:
To: person1@example.org, Person 2 Name <person2@example.net>, person3@example.org, person4@example.org, Person 5 Name <person5@example.org>
可以使用$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'));
这会产生相同的标题。然而,我个人会尝试从 Swift 的验证中受益。
【讨论】:
我得到的输入已经是这种格式了,就是这样。我也许能够改变我接受输入的方式,使其看起来更适合 SwiftMailer,但保留现有值会很棘手。以上是关于我可以在 SwiftMailer 中使用传统的电子邮件“收件人”行吗?的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种正确的方法可以在 symfony 中使用 SwiftMailer 包将 NTLM 身份验证类型添加到 SwiftMailer 中?