Content-Transfer-Encoding

| コメント(0) | トラックバック(0)

一部のユーザからメーリングリストに投稿が行われた場合、fmlによって自動生成されるHTMLアーカイブが文字化けする現象が発生していたのだが、どうやらOpera M2をメールクライアントと利用していることが原因だと最近気が付いた。 ThunderbirdやOutlook Express等のメールクライアントで受信したメールを見る場合は文字化けが発生しないのだが、メッセージのソースを見ると

=1B$B3'MM=1B(B

と言った感じに化けている。 ようだが、受信メール自体は読めているので何らかのエンコーディングがかかっているのだが、fmlのHTMLジェネレーターはデコードできないようだ。

で、他のメールのヘッダーと比べてみたところ

Content-Transfer-Encoding: quoted-printable

と言う1行が異なるので、"Content-Transfer-Encoding:"でググって見たところ、Opera M2ではメールの文字コードが7bitコードであるiso-2022-jpでも"Content-Transfer-Encoding: 7bit"では無く、"Content-Transfer-Encoding: 8bit"をつけて送信してしまうらしい。

あらためてM2から投稿されたメールのヘッダを読んでみると、

>Content-Type: text/plain; format=flowed; delsp=yes; charset=iso-2022-jp
>Content-Transfer-Encoding: 8bit

 charsetがiso-2022-jpなのにエンコードが8bitと書いてあるのがどうも気になるんですよね。
M2以外はOEですらちゃんと7bitと書いてあるし。

で、これだけならまだ問題が無いのだが、世の中にはまだ8bitエンコードのメールを処理できないESMTPサーバも若干ながら存在しているため、"Content-Transfer-Encoding: 8bit"のメールはquoted-printableの処理を行って7bit化し、"Content-Transfer-Encodeing: quoted-printable"にして転送するESMTPサーバが存在するらしい。

なぜか、JIS (ISO-2022-JP)の文章が quoted-printableで変換されています。 このページの一番上の例と比較してください。 制御文字であるESCが「=1B」に変換されているのが判ります。 送信側の設定の問題かもしれません。 あと、送信側のメールソフトがContent-Transfer-Encoding: 8bitという間違ったフィールドを付けた場合に途中で経由したESMTPサーバが変換した実例を確認しています。このとき、

Content-Transfer-Encoding: 8bit

だったものが、

Content-Transfer-Encoding: quoted-printable

に変わります。

で、Thunderbird等のメールクライアントではquoted-printableをデコードしてもとのなんちゃって8bit形式に戻せるのだが、fmlのHTMLジェネレーターではその処理が出来ないと。

一番の解決方法はこんな怪しげなヘッダーをつけるOpera M2メーラなんて使わないことをメーリングリストユーザに強要することだが、あまり現実的ではない。
世界中のESMTPサーバが8bit文字コードに対応すればContent-Transfer-Encodingを8bitからquoted-printableに変換するESMTPサーバもそのうちなくなると思うのだが、これはもっと非現実的だろう。
quoted-printableで受信したメールをPostfixで8bitに変換してからfmlに渡せば解決できないかなぁと思いつつまたググっていたら、

8bit -> 7bit変換を抑制する

デフォルトではContent-Transfer-Encoding: 8bitのメールをquoted-printableに変換するみたい.これを抑制するには以下を記述すればよい.

disable_mime_output_conversion = yes

8bitってまだお行儀悪いのかしら.

と言う情報を発見。ためしに/etc/postfix/main.cfに追加してみたところ、無事、"Content-Transfer-Encoding: 8bit"のままメーリングリストに配信されることを確認。 どうやら、Content-Transfer-Encodingの変換を行っていたのはウチのPostfixだったらしい。

これで一安心ではあるのだが、まだ2つの問題が残っている。

  • ML投稿者からウチのPostfixまでの間にContent-Transfer-Encodingを8bitからquoted-printableに変換するESMTPサーバがからむ場合に8bitに戻すことは出来ない。
  • 8bit文字コード(UTF8とか)の投稿があった場合、ウチのPostfixからML登録者のSMTPサーバまでの間に、8bit文字コード未対応のESMTPサーバ(果たして世界にどの程度残っているのだろうか)が中継していると修復不能な文字化けが発生する可能性がある。

"Content-Type: text/plain; charset=iso-2022-jp"のときに、"Content-Transfer-Encoding: quoted-printable"だったら8bitに変換して"Content-Transfer-Encoding: 7bit"に置換、"Content-Transfer-Encoding: 8bit"だったらそのまま"Content-Transfer-Encoding: 7bit"に置換と言う処理がPostfixで出来ればいいのだけど。

fmlで処理するという方法はあるようだ。

トラックバック(0)

トラックバックURL: http://www.sanzai.net/mt/mt-tb.cgi/307

コメントする

ウェブページ

2014年6月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

アーカイブ

Powered by Movable Type 5.17-ja

このブログ記事について

このページは、散財人が2005年1月17日 15:58に書いたブログ記事です。

ひとつ前のブログ記事は「お年玉付郵便葉書」です。

次のブログ記事は「AIR-EDGE」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。