MozillaZine.jp フォーラム https://forums.mozillazine.jp/ |
|
ThunderbirdでcsvのMIMEが正しくない https://forums.mozillazine.jp/viewtopic.php?f=3&t=15231 |
ページ 1 / 1 |
作成者: | meeyar [ 2015年1月23日(金) 20:53 ] |
記事の件名: | ThunderbirdでcsvのMIMEが正しくない |
Windows8.1でThunderbird31.4.0を利用しています。 メールにcsvファイルを添付した場合のMIMEの扱いについて伺います。 Thunderbirdでメールを作成するときに、csvファイルを添付すると、 Content-Type: application/vnd.ms-excel; となります。 確かにMicrosoft Office2013インストール済の環境ではありますが… csvは本来、MIMEタイプが「text/csv」であり、添付ファイルの際も「text/csv」や「text/comma-separated-values」となるそうです。 MIMEタイプ一覧 RFC 4180 Bugzillaの 759066; Thunderbird sends CSV attachments as application/vnd.ms-excel と同じ現象だと思います。 Thunderbird側で正しくMIMEの指定ができていない状態に見えます。 調べてみると、Microsoft Excelが入っていない環境(Ubuntu12.04/Thunderbird31.4.0で検証) では、正しく Content-Type: text/csv となっていたので、Excelが入っている環境だとThunderbirdが勝手に Content-Type: application/vnd.ms-excel; としてしまうのではないかと思いました。 MIME editでcsvに対して「text/comma-separated-values」を指定しても反映されません。 新規プロファイルでも再現します。 当初オフラインで起動し、プロファイルフォルダ内のmimeTypes.rdfを探したのですが、mimeTypes.rdfはメールの受信と添付ファイルの保存を行わないと作成されないようで、これが作成される前(受信操作を行う前)にcsvファイルを添付したテストメールを作成、下書きに保存した状態でも、以下のようにapplication/vnd.ms-excelとなってしまいます。 コード: Content-Type: application/vnd.ms-excel; name="test.csv" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.csv" 一度csvファイルを受信し、(Excelでは開かずに)「ファイルを保存する」を選んだあとのmimeTypes.rdfは以下の通りで、Excelを選んでいないにもかかわらず、application/vnd.ms-excelに関連付けられてしまっています。 コード: <?xml version="1.0"?> <RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Seq RDF:about="urn:mimetypes:root"> <RDF:li RDF:resource="urn:mimetype:application/vnd.ms-excel"/> </RDF:Seq> <RDF:Description RDF:about="urn:mimetypes"> <NC:MIME-types RDF:resource="urn:mimetypes:root"/> </RDF:Description> <RDF:Description RDF:about="urn:root" NC:ja_defaultHandlersVersion="-1" /> <RDF:Seq RDF:about="urn:schemes:root"> </RDF:Seq> <RDF:Description RDF:about="urn:mimetype:application/vnd.ms-excel" NC:value="application/vnd.ms-excel" NC:editable="true" NC:description="Microsoft Excel 97-2003 Worksheet"> <NC:fileExtensions>csv</NC:fileExtensions> <NC:fileExtensions>xls</NC:fileExtensions> <NC:handlerProp RDF:resource="urn:mimetype:handler:application/vnd.ms-excel"/> </RDF:Description> <RDF:Description RDF:about="urn:schemes"> <NC:Protocol-Schemes RDF:resource="urn:schemes:root"/> </RDF:Description> <RDF:Description RDF:about="urn:mimetype:handler:application/vnd.ms-excel" NC:alwaysAsk="true" NC:saveToDisk="true"> <NC:externalApplication RDF:resource="urn:mimetype:externalApplication:application/vnd.ms-excel"/> </RDF:Description> </RDF:RDF> Excelインストール済環境では正しいMIMEの指定はできないのでしょうか? |
作成者: | mar [ 2015年1月24日(土) 01:45 ] |
記事の件名: | Re: ThunderbirdでcsvのMIMEが正しくない |
MIME タイプは OS の設定 (Windows の場合はレジストリ) が読み込まれるようになってるはずです。 OS で CSV ファイルの関連付けを変更するとどうなるでしょうか? |
作成者: | 偶然的通行人 [ 2015年1月24日(土) 20:34 ] |
記事の件名: | Re: ThunderbirdでcsvのMIMEが正しくない |
横から失礼します。 mar さんのアドバイスと重複する話なのですが、Windows 上の Thunderbird については経験的に次のようなことを知っています。 Windows 上の Thunderbird から送信するメッセージにファイルを添付する場合、次の順位で添付ファイルの MIME タイプを決定するようです。 (1)mimeTypes.rdf に登録されている情報 あるファイルタイプの情報(MIME タイプと拡張子の組み合わせ)が mimeTypes.rdf に登録されていると、この情報をもとに、Thunderbird から送信するメッセージに添付したファイルの MIME タイプが決まります。 万一、不適切なファイルタイプ情報が登録されてしまうと、その後の動作にユーザーの期待に反した結果をもたらすこともありえます。 (2)Windows レジストリに登録されている情報 mimeTypes.rdf 自体がないか、あってもその中に存在しないファイルタイプを送信メッセージに添付した場合、Thunderbird は MIME タイプの情報を OS から取得しようとします。 具体的には、Windows レジストリの HKEY_CLASSES_ROOT にある情報です。拡張子が csv のファイルなら、HKEY_CLASSES_ROOT\.csv というキーの配下に Content Type という文字列値があり、そのデータが引用されるようです。 (3)独自判断で汎用的な MIME タイプを付与 (1)(2)どちらからも MIME タイプの情報を取得できない場合、Thunderbird は自身が判断できる範囲で汎用的な MIME タイプを付与するようです。 Windows OS は、ファイルタイプとその動作を主に拡張子で規定していて、必ずしも MIME タイプを必須の位置づけにはしていません。そのため、ある拡張子のファイルに OS 側で MIME タイプが定義されていないことがあり、(1)(2)どちらからも MIME 情報を得られないことがあります。 meeyar さんのところで起こっている現象は、(1)がなくて(2)から MIME 情報を得ようとしたケースのように思われます。 この場合の解法としては次のどちらかでしょうか。 (a)手動で、mimeTypes.rdf に csv の拡張子と MIME タイプの組み合わせを登録してしまう。 (b)レジストリを直接操作するか、ファイルタイプの管理・編集を手伝ってくれるソフトウェアを使い、csv ファイルに対して text/comma-separated-values または text/csv の MIME(Content Type)を手動で定義する。 Thunderbird に限った話ですと(1)だけでも十分かとは思いますが、システム全体を適正な状態にしておきたいなら(2)も処理しておいたほうがいいかもしれません。 これで、Excel がインストールされた環境でも Thunderbird の送信メッセージに添付する csv ファイルの MIME タイプを適正化できると思います。 とりあえず以上です。的外れな話だったらすみません。 |
作成者: | meeyar [ 2015年1月24日(土) 21:42 ] |
記事の件名: | Re: ThunderbirdでcsvのMIMEが正しくない |
marさん、偶然的通行人さん、アドバイスありがとうございます。 こちらの希望としては、 ・csvファイルを直接開く(閲覧、編集など)場合はExcelでも構わない ・でもメールのMIMEはユーザーの環境に左右されず、正しく指定したい と考えていました。 mar さんが書きました: MIME タイプは OS の設定 (Windows の場合はレジストリ) が読み込まれるようになってるはずです。 当初、コントロールパネルから「既定のプログラム」→「関連付けを変更する」で、csvの関連付けをExcel→メモ帳にしてみたのですが、MIMEの変化はありませんでした。OS で CSV ファイルの関連付けを変更するとどうなるでしょうか? 偶然的通行人 さんが書きました: Windows 上の Thunderbird から送信するメッセージにファイルを添付する場合、次の順位で添付ファイルの MIME タイプを決定するようです。 ご教示ありがとうございます。(1)mimeTypes.rdf に登録されている情報 あるファイルタイプの情報(MIME タイプと拡張子の組み合わせ)が mimeTypes.rdf に登録されていると、この情報をもとに、Thunderbird から送信するメッセージに添付したファイルの MIME タイプが決まります。 万一、不適切なファイルタイプ情報が登録されてしまうと、その後の動作にユーザーの期待に反した結果をもたらすこともありえます。 (2)Windows レジストリに登録されている情報 mimeTypes.rdf 自体がないか、あってもその中に存在しないファイルタイプを送信メッセージに添付した場合、Thunderbird は MIME タイプの情報を OS から取得しようとします。 具体的には、Windows レジストリの HKEY_CLASSES_ROOT にある情報です。拡張子が csv のファイルなら、HKEY_CLASSES_ROOT\.csv というキーの配下に Content Type という文字列値があり、そのデータが引用されるようです。 レジストリのContent TypeからMIMEの情報を取得しているというのは初めて知りました。 Thunderbirdの内部に「このファイルタイプのMIMEはこれ」という設定がフルセットで存在すると思っていたので… 偶然的通行人 さんが書きました: meeyar さんのところで起こっている現象は、(1)がなくて(2)から MIME 情報を得ようとしたケースのように思われます。 普段使いのプロファイルに存在するmimeTypes.rdfにもcsvの記述がなかったので、ご指摘の通りの現象が起こっていたのだと思います。偶然的通行人 さんが書きました: この場合の解法としては次のどちらかでしょうか。 (b)の方法でレジストリ内のcsvについて、Content Typeにtext/csvを手動で定義しました。(a)手動で、mimeTypes.rdf に csv の拡張子と MIME タイプの組み合わせを登録してしまう。 (b)レジストリを直接操作するか、ファイルタイプの管理・編集を手伝ってくれるソフトウェアを使い、csv ファイルに対して text/comma-separated-values または text/csv の MIME(Content Type)を手動で定義する。 これで無事csvのMIMEが正しく処理されるのが確認できました。 レジストリでtext/csvを指定した場合でも、「既定のプログラム」をExcelに指定できたので、元々の希望通りの設定にできました。 MIMEの扱いについて大変勉強になりました。ありがとうございました。 |
作成者: | 偶然的通行人 [ 2015年1月25日(日) 21:21 ] |
記事の件名: | Re: ThunderbirdでcsvのMIMEが正しくない |
解決済みのところ、すみません。補足というか蛇足というか......。 meeyar さんが書きました: コントロールパネルから「既定のプログラム」→「関連付けを変更する」で、csvの関連付けをExcel→メモ帳にしてみたのですが、MIMEの変化はありませんでした。 経験的に、この関連付けはシステム内における拡張子とプログラムの関係を変更しますが、その拡張子の MIME タイプには関与しなかったと思います。 csv ファイルでいえば、レジストリの HKEY_CLASSES_ROOT\.csv キー配下にある、[(規定)] の値が、そのファイル形式に対応する既定のプログラム(のキー)を示していて、この部分が書き換わります。 アプリケーションソフトによっては、自身が扱えるファイル形式をアプリ側から任意に関連付けられるものもありますが、その結果にレジストリの Content Type の変更を含むか否かは、アプリケーションにより違いがあるようです。 試用目的でインストールしたアプリケーションソフトによって、ユーザーが意図しない形でレジストリの Content Type の値が書き換えられてしまうこともあります。 こうしたインストール/アンインストールをくり返した結果によっては、あるファイルタイプに関して定義されていたこれまでの MIME タイプが、いつのまにか微妙に違った中身になっていたり、消えてしまったりするケースも出てきます。 あくまでケース・バイ・ケースであり、ユーザー環境による差があるので一概にはいえませんが、Windows レジストリの Content Type は油断していると変動することがある、という点に留意しておいたほうがいいと思います。 Thunderbird に限っていえば、他のプログラムの影響で変動しうるレジストリに期待するよりは、添付ファイルとして常用するファイルタイプを正しく mimeTypes.rdf に記録させておくほうが、不慮の変動がほとんどない分、信頼性も高く、Thunderbird 単体でのコントロールがしやすいと思います。 (補足) ぼくのコメントは、現場での使用体験の中から、試行錯誤しつつ帰納的にたどり着いた話です。仕様書などから演繹的に導いた話とは違うので、そのつもりでお読みいただければと思います。 |
ページ 1 / 1 | All times are UTC + 9 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |