2010-12-11 36 views
25

我見過很多使用php mail函數的例子。其中一些使用\ r \ n作爲標題換行符,一些使用\ n。哪一行在php郵件頭, r n或 n中斷?

$headers = "From: Just Me\n"; 
$headers .= "Reply-To: Just me <$email>\n"; 

VS

$headers = "From: Just Me\r\n"; 
$headers .= "Reply-To: Just me <$email>\r\n"; 

哪一個是正確的?

有時我遇到過使用\ r \ n的情況,部分郵件頭被一些電子郵件客戶端解釋爲郵件文本(丟失了這些頭信息) - 這是因爲\ r \ n錯了嗎?

回答

21

CRLF \r\n應按照php documentation使用。此外,要符合RFC 2822規格行,必須用回車符,CR \r立即後跟換行符LF \n來分隔。

由於\r\n是原產於Windows平臺和\n爲Unix,你可以使用PHP_EOL­Docs不斷在Windows上,這是腳本正在運行的平臺相應的換行字符。

+0

@Amber哎呀!編輯。感謝:) – 2010-12-11 07:26:49

+1

我想知道爲什麼有些郵件客戶端解釋爲\ r \ n爲兩個換行符(雷鳥似乎是其中之一)。 – Sam 2010-12-11 07:33:27

+0

@Sam不幸的是,我不完全確定。如果你偶然發現答案,請告訴我。 – 2010-12-11 07:40:41

7

如上所述,根據RFC您應該使用\ r \ n,但這會在多個郵件系統(f.i. Outlook 2003)上打破您的標頭。儘管\ n不是'正確的'換行符,但根據我的經驗,它在我迄今遇到的所有郵件系統上都能正常工作。正因爲如此,我總是使用\ n。

+1

\ n本身導致標題被錯誤解讀的電子郵件客戶端列表將會很有用。似乎罕見和愚蠢的是電子郵件客戶端程序員將使用\ n字符作爲電子郵件標頭值的一部分,因爲RFC明確禁止:「字段正文可能由任何US-ASCII字符組成,除了CR和LF「。 (第2.2節)。當兩個換行符終止標頭之前有\ n本身的行爲是未定義的,所以使用\ n作爲標題值終結符比遵循RFC更明智。 – 2014-03-22 00:55:30

10

爲了防止搜索引擎挑選並保存其他人的挫敗感,我經歷了:這是一個額外的好奇心。

在Linux上的PHP 5.2x上,我在PHP郵件()中的電子郵件標題上有\ r \ n,升級到php 5.3.3後,格式化和發送神祕失敗。刪除\ r修復了腳本(檢查了許多其他可能性之後)。

+0

我只是偶然發現了這個問題,通過用簡單的換行符替換CRLF來解決它 – alkar 2012-04-25 20:35:20

+0

這是因爲它們將** \ n **轉換爲** \ r \ n **,所以當您使用** \ r \ n **時輸出將是** \ r \ r \ n ** – user3292788 2015-11-27 02:17:41

1

我遇到了gmail誤解\ r \ n標題的問題,但是簡單地將標題行留在\ n處對我來說還不夠,因爲在這種情況下,某些版本的Outlook將電子郵件顯示爲空。

解決方案https://stackoverflow.com/a/7960957(我選擇安裝postfix 2.9,透過ppa清除)加上使用\ n現在似乎無處不在。

2

我的經歷: HTML電子郵件在網絡客戶端工作,但打破了基於MS的桌面客戶端(隨從,Outlook)。正在使用\ r \ n。僅刪除了MIME版本上的\ r,現在可以在整個版面上使用。

1

我改變了我的腳本使用PHP_EOL,而不是它似乎工作 - 這樣的:

//Set Content-type header 
$headers = "MIME-Version: 1.0" . PHP_EOL; 
$headers .= "Content-type: text/html; charset=iso-8859-1" . PHP_EOL; 
//Additional headers 
$headers .= "From: $from" . PHP_EOL; 
$headers .= "Cc: $cc" . PHP_EOL;  
$headers .= "Content-type: text/html" . PHP_EOL; 
$headers .= "Bcc: $bcc" . PHP_EOL; 

NB。請確保我們「,而不是」,因爲後者似乎並不工作!

2

RFC正式強制CRLF(\ r \ n),但使用Unix中斷(\ n)爲標題將節省您很多麻煩。如果使用\ r \ n,某些郵件服務器(如qmail)會拒絕您的郵件。

來源:經驗,通過本說明確認:http://www.php.net/function.mail#40204

+0

這實際上應該是接受的答案,恕我直言。 – eis 2013-08-27 15:36:52

+1

實際上,大家都在說\ r \ n不起作用,\ n確實起作用的原因是因爲它們在本地發送郵件的unix環境中。這與使用SMTP將郵件直接發送到郵件服務器不同。 – Phil 2015-08-06 21:50:48

相關問題