2013-07-17 3 views
0

Я пытаюсь отправить электронные письма с символами UTF8. В основном электронная почта выглядит так, как я подозреваю, но случайным образом будут отображаться символы мусора. Я считаю, что символы мусора случаются, когда новая строка вставлена ​​в середину одного из символов. Я подозреваю, что компонент электронной почты CakePHP является виновником, так как я читал, что у него есть функция для вставки новых строк в соответствии со свойством lineLength. Есть ли способ исправить это? Я использую CakePHP 1.3.Cakephp, отправляющий электронные письма UTF-8 и lineLength

$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

я обнаружил, эта проблема может быть решена путем кодирования сообщения электронной почты в base64. Компонент электронной почты CakePHP изначально не делает этого, поэтому я написал класс Email64 для расширения компонента электронной почты. Я переписал все функции, содержащиеся

'Content-Transfer-Encoding: 7bit'; 

в

'Content-Transfer-Encoding: base64'; 

А затем в функции _mail(), я заменил вызовов на почтовый функции РНР - что-то вроде этого -

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); 
Смежные вопросы