我正在尝试发送包含UTF8字符的电子邮件。电子邮件通常看起来像我怀疑,但随机会有垃圾字符。我相信当一个新行插入其中一个字符的中间时会发生乱码。我怀疑CakePHP的电子邮件组件是罪魁祸首,因为我正在阅读它有一个功能,根据其lineLength属性插入新行。有没有什么办法解决这一问题?我正在使用CakePHP 1.3。
$this->Email->to = $sendEmail;
$this->Email->from = empty($this->data['Contact']['email']) ? $sendEmail : $this->data['Contact']['email'];
$this->Email->subject = $subject;
$this->Email->sendAs = 'text';
$this->Email->template = 'contact'
$this->set('fields', $this->data['Contact']);
$this->Email->charset = "utf-8";
$this->Email->headerCharset = "utf-8";
return $this->Email->send();
来自电子邮件标题:
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
答案 0 :(得分:0)
我发现可以通过在base64中对电子邮件进行编码来解决此问题。 CakePHP的电子邮件组件本身并不这样做,所以我写了一个类Email64来扩展电子邮件组件。我重新编写了包含
的所有函数'Content-Transfer-Encoding: 7bit';
到
'Content-Transfer-Encoding: base64';
然后在_mail()函数中,我替换了对php的邮件功能的调用 - 就像这样 -
return @mail($to, $this->_encode($this->subject), $message, $header, $this->additionalParams);
到此 -
return @mail($to, $this->_encode($this->subject), rtrim(chunk_split(base64_encode($message))), $header, $this->additionalParams);