後綴字符編碼?

後綴字符編碼?

我使用 Postfix 作為郵件伺服器。我有Ubuntu作業系統。

然後我使用 PHP 發送電子郵件。

問題是我的 VPS 提供者使用的郵件軟體沒有正確編碼我的電子郵件。

據他們說,問題出在我身上。

只是名稱欄位未正確編碼。例如,「Björn」在我的電子郵件中變成「Björn」。

但是,當我回顯 時$name,它輸出“比約恩「 哪個是對的。

此外,gmail 和 hotmail 確實顯示正確。

奇怪的部分是「文字」(訊息本身)被正確編碼。

我使用以下方式發送郵件:

$headers="MIME-Version: 1.0"."\n";
$headers.="Content-type: text/plain; charset=UTF-8"."\n";
$headers.="From: $name <$email>"."\n";

$name=  iconv(mb_detect_encoding($name), "UTF-8//IGNORE//TRANSLIT", $name);
//// I HAVE TRIED WITH AND WITHOUT THE LINE ABOVE, NO DIFFERENCE            

mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $text, $headers, '[email protected]'); 

我也嘗試過使用和不使用 iconv 線,但沒有運氣。

我能想到的最後一件事是後綴修復,那裡可以設定字元編碼嗎?有人知道嗎?

答案1

訊息文字可以是您定義的任何字元集(因為您在郵件標頭中定義了郵件的字元集(content-type = utf8),但標頭(主題、寄件者-姓名、電子郵件)是在客戶端中定義的正在閱讀電子郵件,因此您無法影響它,Gmail 使用 utf8 作為預設值,而其他正在查看電子郵件的用戶端可以使用他們喜歡的任何內容,並且基本上只完全支援 ASCII 字元。

編輯:如果郵件頭中的字元是 MIME 編碼的(“=?charset?encoding?encoded text?=”),則可以在郵件標頭中包含 US-ASCII 之外的字元

答案2

我發現的一個問題是您已轉換$name為 UTF-8將其嵌入到$headers.所以發送到 postfix 的是之前的內容。您應該iconv()這樣做並向其添加 MIME 編碼將其加到$headers.

相關內容