時々、winmail.dat という変な添付ファイルを受け取りました。
どうも、Windows の Outlook で作成したものようです。
MacOSX で開くには、次のアプリケーションを使うとうまくいきま
した。
TNEF's Enough is a program I wrote to help Mac users deal
with certain attachments from users of Microsoft Outlook and
Exchange. The program is freeware so check it out if you
ever receive weird attachments with the name "winmail.dat."
TNEF's Enough.app で、ファイルの内容は取出せたのですが、例に
よってファイル名が文字化けしてうまく取出せません。このファイ
ル名は、shift-jis か何かなのでしょうか。うまく変換する方法は
ないでしょうか。
あと、送ってきた Outlook のユーザに、こういうのを送らないで
欲しいと書きたいのですが、どう説明したらいいでしょうか。何か
手頃なドキュメントは、Web に落ちてないでしょうか。
TNEF stream fileって、どういう形式なのでしょうか。他の OS
(Windows 含む) ではどうしてるのでしょうか。Windows でも、
Outlook 持ってない人もいるでしょうし。
こういうの作った人もいますね。
Ruby TNEF library
http://raa.ruby-lang.org/project/tnef/
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
数ヶ月前にfjで見掛けた話題だなと思ったら、新城さん自身じゃないですか!
Message-ID: <YAS.08Ja...@kirk.is.tsukuba.ac.jp>
Date: 09 Jan 2008 03:49:59 GMT
From: y...@is.tsukuba.ac.jp (Yasushi Shinjo)
Newsgroups: fj.mail,fj.sys.mac.os-x,fj.kanji
Subject: Opening winmail.dat in MacOSX MacOSXでwinmail.datを開く
>MacOSX で開くには、次のアプリケーションを使うとうまくいきま
>した。
(中略)
>TNEF stream fileって、どういう形式なのでしょうか。他の OS
>(Windows 含む) ではどうしてるのでしょうか。Windows でも、
>Outlook 持ってない人もいるでしょうし。
ハイ、Outlook系を忌避しているWindowsユーザです。
中身を見るだけというアプリが欲しいと思って、
探してみたけれども巧く見つからなかったという経験があります。
>あと、送ってきた Outlook のユーザに、こういうのを送らないで
>欲しいと書きたいのですが、どう説明したらいいでしょうか。何か
>手頃なドキュメントは、Web に落ちてないでしょうか。
私も欲しいです。
一般の方から博物館への質問メールに
winmail.datが付いていたことが2回ほどあり、
そのうち1回目の時はwinmail.datが巨大で、
メールの本文テキストから考えても画像を添付している
可能性があった(自明ではなかった)ので、
>「ms-tnef」という形式の添付ファイルが付いており、その内容が解りません。
>調べてみたところ、これはMicrosoft Outlook専用の形式らしく、
>解読する方法も解りませんでした。
>
>参考:
>例えば http://www.rtpro.yamaha.co.jp/RT/FAQ/Users/Application/ms-tnef.html
>
>申し訳ありませんが、意味のある添付ファイルがある場合には、
>形式を改めて御送信ください。
>また、添付ファイルに意味が無い場合は、その旨をお知らせください。
>いずれにしても、「ms-tnef」を添付しない形で
>メールをいただくよう、御願い申し上げます。
と返信したのですが、それきり反応がありませんでした。
#当時、私はwinmail.datもTNEFも、その存在を識りませんでした。
ざっと探してみたのですが、あまり良いテキストは見当たりませんね。
上記引用中のURLは今でも有効で、これが相対的に最良のように思います。
http://support.microsoft.com/kb/278061/ja
http://support.microsoft.com/kb/941245/ja
なんてのもあるようですが、もちろん(^_^;)お勧めしません。
ことのついでなので、解読アプリも改めて探し直してみたところ、
http://unilab.web.infoseek.co.jp/winmail.htm
から
http://zfacts.com/p/64.html
http://www.biblet.freeserve.co.uk/
をたどって入手することができました。
早速、問題のwinmail.datの中身を見てみたところ、
JPEGファイルが2個出てきました。
ちなみに、2回目のときは、winmail.dat自体が小さく、
内容をざっと見てみたところ、メールの本文テキストを編集する作業の
最終段階の記録っぽい内容(次に起動した時に続きから作業するための情報か?)で、
メールの内容から考えても意味のある添付ファイルと思えなかったので、
そのままwinmail.datを無視して対応しました。
今回入手したアプリで見てみると
「添付ファイルは無さそうだ」という趣旨の英文のメッセージが出ました。
まあ、意味のある内容が無いなら無いで構わないのですが、
無いということを保証できないというのも、また困りものですね。
戸田 孝@滋賀県立琵琶湖博物館
to...@lbm.go.jp
Outlook が作る winmail.dat に含まれている添付ファイルを取出
す Ruby スクリプトを書いてみました。次のようにして使います。
(1) 添付ファイルの一覧の表示
% winmail.rb winmail.data ls
(2) 添付ファイルの取出し
% winmail.rb winmail.data extract
実行するには、Ruby 本体の他に次のライブラリが必要です。
Ruby TNEF library
http://raa.ruby-lang.org/project/tnef/
このファイルを取ってきて、適当な場所に置いて、require でかか
るようにします。
このスクリプトはファイル名に漢字が含まれていても、大丈夫です。
MacOSX で作ったので、 UTF-8 で試しましたが、他のシステムでた
とえば EUC になっていても動くでしょう。頭にある漢字コードの
設定を適当に修正します。Shift-JIS なら、Kconv::SJIS です。
端末の文字コードとファイル名の文字コードは別に設定できます。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
----------------------------------------------------------------------
#!/usr/bin/env ruby
#
# Yasushi Shinjo <y...@is.tsukuba.ac.jp>
# Created on 2008/06/06
require "kconv.rb"
require "~/lib/ruby/tnef.rb" # fix the path of tnef.rb
# To get "tnef.rb", visit the following web sites:
# http://raa.ruby-lang.org/project/tnef/
# http://www.zweknu.org/technical/index.rhtml?s=p%7c15
WINMAIL_FILENAME_CODE = Kconv::UTF8
#WINMAIL_TERMINAL_CODE = Kconv::EUC
WINMAIL_TERMINAL_CODE = Kconv::JIS
def usage()
comname = File.basename($0)
$stderr.printf("Usage: %% %s filename subcommand [options]\n",comname)
$stderr.printf("subcommands:\n")
$stderr.printf(" ls\n")
$stderr.printf(" extract\n")
exit( 1 )
end
def main(argv)
if( argv.length < 2 )
usage()
end
filename = argv.shift()
file = File.open( filename )
tnef = TNEF.new( file )
cmd = argv.shift()
case cmd
when "ls"
cmd_ls( tnef, argv )
when "extract"
cmd_extract( tnef, argv )
else
usage()
end
end
def cmd_ls( tnef, argv )
attachments = tnef.attachments
attachments.each { |a|
filename = Kconv.kconv( a.long_filename, WINMAIL_TERMINAL_CODE )
printf("%s\n",filename)
}
end
def cmd_extract( tnef, argv )
attachments = tnef.attachments
attachments.each { |a|
filename = Kconv.kconv( a.long_filename, WINMAIL_FILENAME_CODE )
file = File.open( filename,"w" )
file.write( a.data )
file.close()
}
end
main(ARGV)
In article <0806051936...@nanyanen.lbm.go.jp>
to...@lbm.go.jp writes:
> 数ヶ月前にfjで見掛けた話題だなと思ったら、新城さん自身じゃないですか!
あ、ほんとだ。忘れてました。
2度あることは、n度あるということで、(MacOSXで走る) Ruby ス
クリプトを書いてみました。
From: y...@is.tsukuba.ac.jp (Yasushi Shinjo)
Message-ID: <YAS.08Ju...@kirk.is.tsukuba.ac.jp>
Date: 06 Jun 2008 06:30:49 GMT
Newsgroups: fj.mail.reader,fj.comp.lang.ruby,fj.sources
Subject: winmail.rb -- a Ruby script to extract attachments in winmail.dat
あまり使いたくないスクリプトだけれど、けっこう使えそう。
Locale か何かをみて、文字コードの設定を自動化したかったけれ
ど、できませんでした。ファイル名の文字コードと端末の文字コー
ドをどうするかのあたり。ただ本質的には、個々のアプリケーショ
ンでやることではないですよね。どこかでまとめてやりたい。
open() をフックするのか。
あと、とりだすファイルのパタンを書けたり、日付も保存したいと
いうのはあります。誰かやってくれるとうれしい。
> まあ、意味のある内容が無いなら無いで構わないのですが、
> 無いということを保証できないというのも、また困りものですね。
今回は意味があったし、あと、文字コードの問題でそもそも
open() できないというこも考えられまして。たとえば、MacOSX で
は、ファイル名は UTF-8 ですが、その場合、UTF-8 で見た時に正
しいくないと、open() でこけます。たんに化け化けのファイルが
作られるなら、まだ内容は確認でますし、mv で改名するのもでき
ます。でも、open() でこけたら、ファイルに保存されません。