2012-02-15 59 views
0

我環顧四周,但無法找到有關我面臨的問題的答案。發送到Outlook的PHP郵件()中斷代碼

與我的問題最相似的是:emails sent with php mail don't show up correctly in outlook,但我檢查瞭解決方案沒有爲我工作。

我基本上寫一個PHP腳本,發送電子郵件,其中的表。但問題是,如果我通過Gmail收到它,電子郵件顯示正常,但根本沒有通過Outlook。

檢查電子郵件,不要讓它通過到Outlook的源代碼,給出了一些原因換行符(又不是在Gmail中存在)

如:

<td> [email protected] 
tt.com </td> 

當它應該出現如:

<td> [email protected] </td> 

在我的PHP代碼,我甚至嘗試刪除行和空格(如應該有在電子郵件中沒有空格)

$rmv = array("\n"); 
$lead_email = str_replace($rmv, "", $lead_email); 

$rmv = array("\r"); 
$lead_email = str_replace($rmv, "", $lead_email); 

$rmv = array(" "); 
$lead_email = str_replace($rmv, "", $lead_email); 

僅供參考,我的郵件標題如下:

$headers = 'MIME-Version: 1.0' . "\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; 
$headers .= 'From: [email protected]' . "\n"; 

順便說一句,我應該使用ISO-8859-1或UTF-8?我偶爾遇到歐洲人物的名字。

任何幫助非常感謝!

編輯:所以我正在檢查源代碼,並發現一些有趣的東西。信息很長,但只顯示3-4行。我發現它被截斷大約991個字符,因此電子郵件分手..這是什麼與Mime版本1.0? 如何增加可以接收的字符數?我嘗試在每個表格行之後添加'\ r \ n',但是4封電子郵件中的一封郵件仍然因爲某種原因仍然不顯示。

編輯2:謝謝大家的幫助!我終於想通了,在2009年追溯供將來參考論壇上發帖,請參閱最後發帖:

http://forums.devarticles.com/php-development-48/formatting-a-newline-line-break-in-php-html-output-5274.html

+0

使用像Swiftmailer這樣的庫,而不是使用mail() - 它會讓所有錯綜複雜的東西都適合你。 – halfer 2012-02-15 22:46:41

+0

對於Windows(Outlook)使用回車換行符\ r \ n – Aknosis 2012-02-15 22:58:29

+0

是。在大多數情況下,outlook無法正確處理html。我認爲這是因爲它使用ms字去渲染htmls。 – iWantSimpleLife 2012-02-17 01:35:38

回答

1

您應該使用UTF-8,如果你有非字母數字字符。您應該用「\ r \ n」結束每個標題行,而不僅僅是一個普通的「\ n」。不知道這是否能解決你的問題,因爲我無法測試,但這是你應該解決的問題。

+0

嗨,我試着設置'charset = utf-8'並添加「\ r \ n」,但是4封電子郵件中的1封仍然沒有顯示出來。 – Shiroi98 2012-02-15 23:03:13

+0

也許被Outlook的垃圾郵件過濾器所捕獲?你應該檢查一下。 – 2012-02-15 23:09:20

+0

是的,我也想過,它不在垃圾郵件文件夾中。 – Shiroi98 2012-02-15 23:12:49

0

聽起來好像您只在郵件的HTML部分添加了「\ r \ n」。 全部標題行必須以「\ r \ n」結尾,而不僅僅是正文中的行。某些客戶端和服務器只能處理「\ n」,但他們實際上不必(見RFC 2822),因此Gmail和Outlook之間的不一致。