― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2015年1月23日(金) 20:53 
オフライン

登録日時: 2011年7月14日(木) 22:59
記事: 547
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の指定はできないのでしょうか?

_________________
Thunderbirdの基本を書いています(ずっと発展途上) とりかごとなり。
基本の操作(画像あり):バージョン確認 / セーフモード / 新規プロファイル作成
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60

通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2015年1月24日(土) 01:45 
オフライン
Moderator

登録日時: 2007年7月20日(金) 14:46
記事: 370
MIME タイプは OS の設定 (Windows の場合はレジストリ) が読み込まれるようになってるはずです。
OS で CSV ファイルの関連付けを変更するとどうなるでしょうか?

_________________
mar
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0

通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2015年1月24日(土) 20:34 
横から失礼します。

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 タイプを適正化できると思います。

とりあえず以上です。的外れな話だったらすみません。

_________________
Mozilla/5.0 (Windows NT 6.2; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2015年1月24日(土) 21:42 
オフライン

登録日時: 2011年7月14日(木) 22:59
記事: 547
marさん、偶然的通行人さん、アドバイスありがとうございます。

こちらの希望としては、
・csvファイルを直接開く(閲覧、編集など)場合はExcelでも構わない
・でもメールのMIMEはユーザーの環境に左右されず、正しく指定したい
と考えていました。

mar さんが書きました:
MIME タイプは OS の設定 (Windows の場合はレジストリ) が読み込まれるようになってるはずです。
OS で CSV ファイルの関連付けを変更するとどうなるでしょうか?
当初、コントロールパネルから「既定のプログラム」→「関連付けを変更する」で、csvの関連付けをExcel→メモ帳にしてみたのですが、MIMEの変化はありませんでした。
偶然的通行人 さんが書きました:
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の記述がなかったので、ご指摘の通りの現象が起こっていたのだと思います。
偶然的通行人 さんが書きました:
この場合の解法としては次のどちらかでしょうか。
(a)手動で、mimeTypes.rdf に csv の拡張子と MIME タイプの組み合わせを登録してしまう。
(b)レジストリを直接操作するか、ファイルタイプの管理・編集を手伝ってくれるソフトウェアを使い、csv ファイルに対して text/comma-separated-values または text/csv の MIME(Content Type)を手動で定義する。
(b)の方法でレジストリ内のcsvについて、Content Typeにtext/csvを手動で定義しました。
これで無事csvのMIMEが正しく処理されるのが確認できました。

レジストリでtext/csvを指定した場合でも、「既定のプログラム」をExcelに指定できたので、元々の希望通りの設定にできました。

MIMEの扱いについて大変勉強になりました。ありがとうございました。

_________________
Thunderbirdの基本を書いています(ずっと発展途上) とりかごとなり。
基本の操作(画像あり):バージョン確認 / セーフモード / 新規プロファイル作成
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60

通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2015年1月25日(日) 21:21 
解決済みのところ、すみません。補足というか蛇足というか......。

meeyar さんが書きました:
コントロールパネルから「既定のプログラム」→「関連付けを変更する」で、csvの関連付けをExcel→メモ帳にしてみたのですが、MIMEの変化はありませんでした。

経験的に、この関連付けはシステム内における拡張子とプログラムの関係を変更しますが、その拡張子の MIME タイプには関与しなかったと思います。
csv ファイルでいえば、レジストリの HKEY_CLASSES_ROOT\.csv キー配下にある、[(規定)] の値が、そのファイル形式に対応する既定のプログラム(のキー)を示していて、この部分が書き換わります。

アプリケーションソフトによっては、自身が扱えるファイル形式をアプリ側から任意に関連付けられるものもありますが、その結果にレジストリの Content Type の変更を含むか否かは、アプリケーションにより違いがあるようです。

試用目的でインストールしたアプリケーションソフトによって、ユーザーが意図しない形でレジストリの Content Type の値が書き換えられてしまうこともあります。
こうしたインストール/アンインストールをくり返した結果によっては、あるファイルタイプに関して定義されていたこれまでの MIME タイプが、いつのまにか微妙に違った中身になっていたり、消えてしまったりするケースも出てきます。

あくまでケース・バイ・ケースであり、ユーザー環境による差があるので一概にはいえませんが、Windows レジストリの Content Type は油断していると変動することがある、という点に留意しておいたほうがいいと思います。

Thunderbird に限っていえば、他のプログラムの影響で変動しうるレジストリに期待するよりは、添付ファイルとして常用するファイルタイプを正しく mimeTypes.rdf に記録させておくほうが、不慮の変動がほとんどない分、信頼性も高く、Thunderbird 単体でのコントロールがしやすいと思います。

(補足)
ぼくのコメントは、現場での使用体験の中から、試行錯誤しつつ帰納的にたどり着いた話です。仕様書などから演繹的に導いた話とは違うので、そのつもりでお読みいただければと思います。

_________________
Mozilla/5.0 (Windows NT 6.2; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2015年1月25日(日) 22:54 
オフライン

登録日時: 2011年7月14日(木) 22:59
記事: 547
補足説明ありがとうございます。
偶然的通行人 さんが書きました:
meeyar さんが書きました:
コントロールパネルから「既定のプログラム」→「関連付けを変更する」で、csvの関連付けをExcel→メモ帳にしてみたのですが、MIMEの変化はありませんでした。

経験的に、この関連付けはシステム内における拡張子とプログラムの関係を変更しますが、その拡張子の MIME タイプには関与しなかったと思います。
csv ファイルでいえば、レジストリの HKEY_CLASSES_ROOT\.csv キー配下にある、[(規定)] の値が、そのファイル形式に対応する既定のプログラム(のキー)を示していて、この部分が書き換わります。

ここの(規定)の部分は結構早くに気づきました。
添付画像の赤枠の部分ですよね?
確かにContent Typeとは別に設定されているように見えます。

偶然的通行人 さんが書きました:
試用目的でインストールしたアプリケーションソフトによって、ユーザーが意図しない形でレジストリの Content Type の値が書き換えられてしまうこともあります。
こうしたインストール/アンインストールをくり返した結果によっては、あるファイルタイプに関して定義されていたこれまでの MIME タイプが、いつのまにか微妙に違った中身になっていたり、消えてしまったりするケースも出てきます。

あくまでケース・バイ・ケースであり、ユーザー環境による差があるので一概にはいえませんが、Windows レジストリの Content Type は油断していると変動することがある、という点に留意しておいたほうがいいと思います。

Thunderbird に限っていえば、他のプログラムの影響で変動しうるレジストリに期待するよりは、添付ファイルとして常用するファイルタイプを正しく mimeTypes.rdf に記録させておくほうが、不慮の変動がほとんどない分、信頼性も高く、Thunderbird 単体でのコントロールがしやすいと思います。

最初にMIME editでの編集が上手くいかなかったので、mimeTypes.rdfの編集をややためらっていたのですが、改めて見てみると拡張子の項目をドット付きで登録してしまっていた(csvとすべきところを.csvとしていた)為に反映されていなかったらしいというのが判明しました(汗)。

MIME editで(ドットなしの)csvとして拡張子を登録したところ、mimeTypes.rdfの中にcsvの関連付けが
コード:
<RDF:Description RDF:about="urn:mimetype:text/csv"
NC:value="text/csv"
NC:editable="true"
NC:description="csv"
NC:fileExtensions="csv">
<NC:handlerProp RDF:resource="urn:mimetype:handler:text/csv"/>
</RDF:Description>
となっていたので、Thunderbird側でも登録はされたものと考えてよいのかなと思います。
お騒がせしました。


添付ファイル:
コメント: regedit画面のcsv
csv.png
csv.png [ 24.29 KiB | 表示数: 7968 回 ]

_________________
Thunderbirdの基本を書いています(ずっと発展途上) とりかごとなり。
基本の操作(画像あり):バージョン確認 / セーフモード / 新規プロファイル作成
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60
通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 6 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[17人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean