山魈 Api ??在主题

Mandrill Api ?? in Subject

我正在使用 Mandrill Transport (https://github.com/khanlou/MandrillTransport-CakePHP) 在我的 cakephp 应用程序中发送邮件。

但是在发送邮件时我收到了??由于特殊字符,在我的主题行中的奇怪位置。

Subject = 'Découvrez vite toutes les nouveautés sur r7site.com'

Result = 'Découvrez vite toutes les nouveautés sur r7?? site.com'

如你所见??摆放的很奇怪。

当我使用默认的 cakephp 邮件时,它就像一个魅力...

public $default = array(
    'transport' => 'Mail',
    'from' => 'noreply@q8mazout.be',
    'charset' => 'utf-8',
    'headerCharset' => 'utf-8',
);

我猜这与 utf-8 字符集有关,但我不确定。内容适用于 mandrill,实际上字符在主题中也打印得很好。只是 ??不应该在那里...

您需要将您的内容从 ASCII 转换为 UTF-8,为此您可以使用以下函数,因为某些第三方 API(例如 mandrill)很多时候不支持特殊字符。

mb_convert_encoding($subject, 'UTF-8', 'ASCII');

我终于找到了解决办法。显然,CakePHP 向标题添加了换行符,导致标题中断。虽然它只发生在特殊字符上。

标题调试:

'=?UTF-8?B?RMOpY291dnJleiB2aXRlIHRvdXRlcyBsZXMgbm91dmVhdXTDqXMgc3VyIHE4?= =?UTF-8?B?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,
    ...
);