CakePHP电子邮件传输编码

时间:2015-02-23 22:51:29

标签: cakephp

我为CakeEmail创建了一个自定义传输(允许我使用Mandrill发送电子邮件)。但是,每当我访问消息的内容(驱动蛋糕电子邮件模板)时,它都不会正确编码字符(它会将'é'更改为'é'等)。如果我使用CakeEmail并绕过传输,它会在电子邮件中正确显示字符。我已将其缩小到传输代码中的$ email-> message('html')。如果我输出$ email-> message('html'),则字符已经不正确。

App::uses('AbstractTransport', 'Network/Email');
App::uses('HttpSocket', 'Network/Http');

class MandrillTransport extends AbstractTransport {
    public function send(CakeEmail $email) {
        debug($email->message('html'));exit;
    }
}

思想?

1 个答案:

答案 0 :(得分:0)

您最有可能在某处出现编码不匹配,例如,如果您的App.encodingCakeEmail::$charset不匹配,CakeEmail会尝试转换App.encoding中的内容} CakeEmail::$charset

<强> https://github.com/cakephp/.../2.6.2/lib/Cake/Network/Email/CakeEmail.php#L1338

例如前者为iso-8859-1,后者为utf-8,就像内容一样,您最终会看到此处显示的结果。

// outputs é when displayed as utf-8/unicode
echo mb_convert_encoding('é', 'utf-8', 'iso-8859-1');

您必须进行一些进一步的调试,以追查出现问题的地方。