2007-03-01 [長年日記]

[Q3] Content-Typeの処理

2.9.29まではContent-Typeのパースに失敗した場合には、Content-Typeが付いていないのと同じ扱いをしていました。ところが、これだと添付ファイルのContent-Typeが壊れている(上にContent-Dispositionが付いていない)と添付ファイルとして扱えないという問題がありました。そこで、2.9.30ではパースに失敗した場合には、application/octet-streamが付いているのと同じ扱いにしました*1

ところが、今度はMIME以前の形式である、

Content-Type: text

のようなヘッダが付いているメッセージがapplication/octet-stream扱いされるようになってしまいました。そこで、今度はMIME-Versionが付いていない場合にはContent-Typeは無視するというようにしてみました。

ところが、今度はQMAIL3のRSSアカウントで生成しているメッセージにMIME-Versionが付いていないことが発覚し、この変更をしてしまうとマルチパートにしたRSSのエントリが読めないことが分かりました。とりあえず、RSSアカウントで生成するメッセージにはMIME-Versionを付けるようにしましたが、いままでのエントリの扱いが変わってしまうのはいただけません。それを置いておいても、適当に生成したメッセージだとMIME-Versionが付いていないのにContent-Typeが付いているというケースはありそうです。

というわけで、最終的にはContent-Typeをパースしてエラーになった場合には、MIME-Versionが付いていたらapplication/octet-stream扱い、付いていなければContent-Typeがないのと同じ扱い、というところに落ち着きました。

*1  バイナリが化けてテキストになってファイルとして保存もできないよりは、テキストが添付ファイルになっているほうがまだマシなので

[]