2011-11-18 54 views
0

我目前正在開發一個網站,幫助codeigniterion auth庫。Codeigniter:尋找email-> set_newline(..)功能的解釋

我正在嘗試使用ion auth的標準功能重置用戶密碼。

在庫有2個功能:

  • forgotten_password($identity)
  • forgotten_password_complete($code)

這兩個函數(如果驗證經過)發送電子郵件給用戶。功能本身有效,但我收到的電子郵件已損壞。電子郵件標題顯示爲電子郵件正文的一部分。這是一個破碎的電子郵件的外觀:

Date: Fri, 18 Nov 2011 23:36:32 +0100 

From: "Example.com" <[email protected]> 

Reply-To: "[email protected]" <[email protected]> 

X-Sender: [email protected] 

X-Mailer: CodeIgniter 

X-Priority: 3 (Normal) 

Message-ID: <[email protected]> 

Mime-Version: 1.0 

Content-Type: multipart/alternative; boundary="B_ALT_4ec6ddf0d26b9" 






This is a multi-part message in MIME format. 

Your email application may not support this format. 



--B_ALT_4ec6ddf0d26b9 

Content-Type: text/plain; charset=utf-8 

Content-Transfer-Encoding: 8bit 



New Password for test_user 



Your password has been reset to: 0774b65f5e 





--B_ALT_4ec6ddf0d26b9 

Content-Type: text/html; charset=utf-8 

Content-Transfer-Encoding: quoted-printable 



<html> 
<body> 
    <h1>New Password for test_user</h1> 
=09 
    <p>Your password has been reset to: 0774b65f5e</p> 
</body> 
</html> 



--B_ALT_4ec6ddf0d26b9-- 

但是我能追查這是造成麻煩線:

$this->ci->email->set_newline("\r\n");

當我註釋掉這一行(在這兩個函數中提到上面),我重置用戶密碼時收到的電子郵件都很好。

有人可以向我解釋這條線的目的嗎?是否僅僅通過評論線來解決這個問題是一個好主意。

我還發現2個問題

指的是相同或至少相似的問題。由於它們相當古老,尚未得到答覆,我創建了一個新的。希望沒有人介意。

回答

3

不同的操作系統使用不同的字符來確定一個新行(一行到下一行的位置)。在HTML中,相當於<br>標記。一些(舊?Mac)傳統上使用\r,一些(Unix)傳統上使用\n,而另一些(Windows)傳統上同時使用(\r\n)。

笨默認爲\n(見documentation),但離子AUTH壓倒的作者,要使用\r\n,這是standard

因此,解析電子郵件標頭的程序(基於我最好的猜測是基於nix的)會看到非Unix標準的\r\n行,並開始將標題作爲正文的一部分排出。

就我所知,您只需要\n就可以得到罰款,這就是Codeigniter默認使用它的原因。我見過的每個遇到麻煩的人都是使用\r\n的人,並且遇到了同樣的問題。

1

在CI中,當您將該行註釋掉時,該設置默認爲'\n'。該設置取決於PHP正在使用的郵件服務器。有時postfix和其他一些服務器將替換\r\n\r\r\n導致錯誤,所以在這些情況下,最好只使用\n,因爲標準(RFC 822)要求\r\n