我为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;
}
}
想法?
您很可能在某个地方编码不匹配,例如,如果App.encoding
与CakeEmail::$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');
您必须进行一些进一步的调试,以追踪到底哪里出了问题。