簡體   English   中英

從php發送郵件:標題被解釋為正文?

[英]sending mail from php: headers are interpreted as body?

當我從php發送帶有\\ r \\ n的郵件作為標題中的換行符( 因為它應該根據文檔

$headers = "From: $email\r\n"; 
$headers .= "Reply-To:  Just me <$email>\r\n"; 
$headers .= 'Content-type: text/plain; charset=iso-8859-1' . "\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$subject = "Hello world";
$body = "<html><p>Hey, whats up?</p></html>";

mail($to, $subject, $body, $headers);

某些郵件客戶端會將\\ r \\ n解釋為兩個換行符。 因此,對於上面的郵件(),真正的郵件內容將如下所示:

X-Message-Delivery: Vj0LEdMMtPAYT0xO0Q9MTtTQ0w9MA==
X-Message-Status: n
Received: from server75.publicompserver.de ([92.43.108.63]) by snt0-mc2-f13.Snt0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675);
 Thu, 9 Dec 2010 12:09:22 -0800
Message-ID: <40177C.70807@justme.org>
[lots of other headers]
Date: Thu, 09 Dec 2010 21:09:32 +0100
X-OriginalArrivalTime: 09 Dec 2010 20:09:22.0873 (UTC) FILETIME=[F88C3A90:01CB97DC]
From: $email

Reply-To:  Just me <$email>

Content-type: text/html; charset=iso-8859-1

Content-Transfer-Encoding: 8bit

<html><p>Hey, whats up?</p></html>

現在一些客戶(例如googlemail)會忽略這些額外的換行符。 其他人(thunderbird)會將第一個額外的換行符解釋為標題的結尾,並將其余的標題行解釋為正文的一部分(丟失標題信息,在這種情況下將郵件呈現為文本而不是html)。

我也從其他郵件發送網站看到了同樣的問題。

這里發生了什么? \\ r \\ n根據doc是正確的換行符,還是其他出錯的地方? 它怎么解決? 將換行符更改為\\ n而不是\\ r \\ n似乎有所幫助,但由於文檔說“你應該使用\\ r \\ n”這不可能是正確的,可以嗎?

這在http://php.net/manual/en/function.mail.php的文檔中提到:“如果沒有收到消息,請嘗試僅使用LF(\\ n)。一些劣質的Unix郵件傳輸代理取代由CRLF自動填充LF(如果使用CRLF,則會導致CR加倍)。這應該是最后的手段,因為它不符合»RFC 2822。

所以,正如你所說:這不對,但這是現實。

如前一個問題所述。 每個平台以不同的方式(CRLF或LF)界定線條。 最好通過PHP_EOL常量將此決定留給PHP,PHP將負責處理它。

在您的代碼中,您對某些標題行使用\\ r \\ n,而對其他標題行僅使用\\ n。 如果你保持一致,也許不會出現這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM