我遇到了 SwiftMailer 的一个相当臭名昭著的问题:
Fatal error: Uncaught exception ‘Swift_RfcComplianceException’ with message ‘Address in mailbox given [noreply@host.com] does not comply with RFC 2822, 3.6.2.’
正在使用以下代码创建消息(有效):
$message = \Swift_Message::newInstance()
->setSubject('Subject')
->setFrom(array('noreply@host.com' => 'Host'))
->setTo('recipient@gmail.com');
...
奇怪的是,地址:noreply@host.com 在 Windows 环境中运行 Xampp 的本地计算机上不会使 addr-spec 正则表达式失败,但在运行 Ubuntu 的计算机上却会失败来自 /opt/lampp
的 Xampp 解决方案。
- 这似乎不是 PCRE 版本的问题(两者相同),因为当我将
add-spec
提取到一个字符串并通过一个简单的脚本运行它进行解析时,它通过了. - 电子邮件地址中没有多余的字符,也没有未修剪的空格。
更新:
查看 Apache 日志我想我可能已经找到了潜在的问题:
PHP Warning: preg_match(): Compilation failed: internal error: previously-checked referenced subpattern not found at offset 4246 in /home/ubuntu/.../vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php on line 354, referer: http://...
所以在 Windows 上,正则表达式可以正常编译,但在 Linux 上却不行;除非它被提取并放入适当的转义符。
在Github上发现了几个与此相关的问题:
- https://github.com/swiftmailer/swiftmailer/issues/279
- https://github.com/swiftmailer/swiftmailer/issues/259
似乎在提示 @
符号后的子模式。上面引用的 Github 问题中的一条评论似乎暗示当 Apache 处理正则表达式时会抛出错误,这符合我在 Ubuntu 12.10 系统(尽管不是在 Windows 上)上的经历。
这是否与 Apache 没有正确的 PCRE 支持或配置不正确有关?
谢谢!
最佳答案
我给你发了一个 swiftmailer 的例子:
参数.yml
目的地:[email1, email2, email3]
服务:
您的服务名称:
class: your path
arguments: ["%destinatarios%"]
服务类:
protected $destinatarios;
public function __construct($destinatarios)
{
$this->destinatarios = $destinatarios;
}
->setCc($this->destinatarios)
关于php - 有效电子邮件地址的 Swift_RfcComplianceException,适用于 Windows 而不是 Ubuntu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15963755/