Swift_RfcComplianceException对有效的电子邮件地址,工作在Windows而不是在Ubuntu


Swift_RfcComplianceException on valid email address, works in Windows not in Ubuntu

我遇到了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的本地机器上没有失败,但是在/opt/lampp中运行Xampp解决方案的Ubuntu机器上却失败了。

  • 这似乎不是一个问题与PCRE版本(两者相同),因为当我提取add-spec到一个字符串,并通过一个简单的脚本运行解析,它通过。
  • 邮件地址中没有多余的字符,没有未修剪的空白。

:

查看Apache日志,我想我可能已经找到了潜在的问题:

PHP警告:preg_match():编译失败:内部错误:在/home/ubuntu/……/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php的偏移量4246处没有找到先前检查的引用子模式,参考:http://...

所以在Windows上,regex编译得很好,但在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给你发一个例子:

parameters.yml

destinatarios: [email1, email2, email3]

服务:

您的服务名称:

    class: your path
    arguments: ["%destinatarios%"]

服务的类:

保护destinatarios美元;

public function __construct($destinatarios)
{
    $this->destinatarios = $destinatarios;
}
->setCc($this->destinatarios)