Mandrill Api ??在主题

时间:2015-09-15 11:07:11

标签: email cakephp mandrill

我正在使用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下运行良好,实际上字符也在主题中打印得很好。只是 ??不应该在那里......

2 个答案:

答案 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');