
メールサーバーとして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
一つ問題なのは、$name
UTF-8に変換したことです後に埋め込む$headers
。Postfixに送られるのは、以前そこにあったものすべてです。iconv()
それにMIMEエンコーディングを追加する必要があります。前にに追加します$headers
。