Postfix 文字エンコーディング?

Postfix 文字エンコーディング?

メールサーバーとしてPostfixを使用しています。OSは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 エンコードされている場合、メッセージ ヘッダーに US-ASCII 以外の文字を含めることができます ("=?charset?encoding?encoded text?=")

答え2

一つ問題なのは、$nameUTF-8に変換したことですに埋め込む$headers。Postfixに送られるのは、以前そこにあったものすべてです。iconv()それにMIMEエンコーディングを追加する必要があります。前にに追加します$headers

関連情報