CakePHP电子邮件传输编码
问题描述:
我为CakeEmail创建了一个自定义传输(为了让我使用Mandrill发送邮件)。但是,每当我访问邮件内容(这是蛋糕电子邮件模板驱动的内容)时,它不会正确地对字符进行编码(它会将'é'更改为'Ã'等等)。如果我使用CakeEmail并绕过传输,它会在电子邮件中正确显示字符。我在传输代码中将其缩小为$ email-> message('html')。如果我输出$ email-> message('html'),则这些字符已经不正确。CakePHP电子邮件传输编码
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');
你必须做一些进一步的调试才能确定事情发生错误的地方。