2011-12-02 109 views
4

當主題超過75個字符時,我在我的MIME標題中出現一些亂碼。 當換行符在標題中編碼時,會出現無效的額外換行符。畸形的電子郵件主題標題當主題> 75字符使用codeigniter電子郵件庫

某些電子郵件網關彈出電子郵件時出現「格式錯誤的MIME字段:?= =?utf-8?Q?SUBJECT?=」錯誤。

有沒有人有使用CodeIgniter發送電子郵件的utf-8問題的任何經驗?


-snip- 
Return-Path: *** 
Subject: =?utf-8?Q?SUBJECT_LINE <-- 
?=         <-- Problem in Subject header 
=?utf-8?Q?SUBECT_LINE_2?=   <-- 
To: *** 
Reply-To: *** 
-snip- 

更新: 這有什麼好做的與Gmail SMTP。我已經重寫了這個問題,希望它能幫助未來的人。

回答

15

顯然這是一個已知問題,由主題行> 75個字​​符引起。

http://codeigniter.com/forums/viewthread/154493/P15/#925385

的修復是改變電子郵件的配置是這樣的:

$config['newline'] = "\r\n"; 
$config['crlf'] = "\n"; 
+0

這解決了這個問題對我來說。不過,我使用了內嵌的配置字符串:'$ this-> email-> newline =「\ r \ n」;'和'$ this-> email-> crlf =「\ n」;' – zvineyard

+0

我喜歡把它在它自己的配置文件中,但它們都工作。你也可以用它自己的單獨配置參數創建一個單獨的email對象實例:'$ email = new CI_Email(array('newline'=>「\ r \ n」));' – willoller

+1

CodeIgniter也有問題把換行符放在多字節字符的中間。看看https://github.com/EllisLab/CodeIgniter/issues/1498 –

2

因爲我自己有這種確切的問題,我會在這裏分享的解決方案,因爲所提供的解決方案不適用於2.2版工作

查找這段代碼位於系統/庫/ Email.php:365

public function subject($subject) 
{ 
    $subject = $this->_prep_q_encoding($subject); 
    $this->_set_header('Subject', $subject); 
    return $this; 
} 

有了這一個

public function subject($subject) 
{ 
    $subject = '=?UTF-8?B?'.base64_encode($subject).'?='; 
    $this->_set_header('Subject', $subject); 
    return $this; 
}