我正在使用Mandrill Transport(https://github.com/khanlou/MandrillTransport-CakePHP)在我的cakephp应用程序中发送邮件。
但是发送邮件的时候我得到了?由于特殊字符,在我的主题行中的奇数位置。
主题='Découvrezvitetouteslesnouveautésurr7site.com '
结果='Découvrezvitetouteslesnouveautésurr7 ?? site.com
你可以看到??非常奇怪。
当我使用默认的cakephp邮件时,它就像一个魅力......
public $default = array(
'transport' => 'Mail',
'from' => 'noreply@q8mazout.be',
'charset' => 'utf-8',
'headerCharset' => 'utf-8',
);
我想这与utf-8字符集有关,但我不确定。内容在mandrill下运行良好,实际上字符也在主题中打印得很好。只是 ??不应该在那里......
答案 0 :(得分:1)
我终于找到了解决方案。显然,CakePHP会在标题中添加新的行字符,导致标题中断。虽然它只发生在特殊字符上。
调试标题:
=?UTF-8 2 B 4 RMOpY291dnJleiB2aXRlIHRvdXRlcyBsZXMgbm91dmVhdXTDqXMgc3VyIHE4?= =?UTF-8 2 B 4 bWF6b3V0LmJl?='
MandrillTestTransport中的解决方案
$subject = str_replace(array(PHP_EOL, "\r"), '', $this->_cakeEmail->subject());
$message = array(
'html' => $this->_cakeEmail->message('html'),
'text' => $this->_cakeEmail->message('text'),
'subject' => $subject,
...
);
答案 1 :(得分:0)
您需要将您的内容从ASCII转换为UTF-8,为此您可以使用以下功能,因为一些第三方api(例如mandrill)不支持特殊字符。
mb_convert_encoding($ subject,'UTF-8','ASCII');