我遇到了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)