0

我正在尝试发送带有 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
4

1 回答 1

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);
于 2013-07-18T16:06:36.483 回答