0

UTF8 文字でメールを送信しようとしています。ほとんどの場合、電子メールは私が疑うように見えますが、ランダムに文字化けがあります。文字の途中に新しい行が挿入されると、文字化けが発生すると思います。lineLength プロパティに従って新しい行を挿入する機能があることを読んでいたので、CakePHP の電子メール コンポーネントが原因であると思われます。これを修正する方法はありますか?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 に答える