有效电子邮件地址的Swift_RfcComplianceException,适用于Windows而非Ubuntu

时间:2013-04-12 05:30:08

标签: php exception symfony swiftmailer rfc2822

我遇到了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计算机上运行失败Xampp解决方案来自/opt/lampp

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

更新

查看Apache日志,我想我可能已经找到了根本问题:

  

PHP警告:preg_match():编译失败:内部错误:在/home/ubuntu/.../vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/中的偏移4246处找不到先前检查的引用子模式第354行的Headers / MailboxHeader.php,referer:http:// ...

所以在Windows上,正则表达式编译得很好,但在Linux上却没有;除非它被提取并放入适当的逃逸。

在Github上发现了一些与此相关的问题:

似乎在@标志后抱怨子模式。上面引用的Github问题中的一条注释似乎暗示当Apache处理正则表达式时会抛出错误,这与我在Ubuntu 12.10系统上遇到的情况相符(虽然不在Windows上)。

这可能与Apache没有正确的PCRE支持或配置错误有关吗?

谢谢!

1 个答案:

答案 0 :(得分:-1)

我发送swiftmailer的例子:

parameters.yml

destinatarios:[email1,email2,email3]

服务:

您的服务名称:

    class: your path

    arguments: ["%destinatarios%"]

服务的类别:

protected $ destinatarios;

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

->setCc($this->destinatarios)