/ / 最新

swk's log - Mew のファイルを Outlook Express で読み込むと添付データが壊れる(ことがある)件

2005-11-28

* Mew のファイルを Outlook Express で読み込むと添付データが壊れる(ことがある)件 [tech]

というわけで [2005-11-22-1] 続き. どうも末尾 1 文字が落ちているっぽいという調査結果が報告されている.

しかし POP で取って来た場合になぜ大丈夫なのかはこれでは説明がつかな い,とされている.

…いや,説明つくんじゃないかな.Mew が改行を LF にしてファイル保存し ているからじゃない? というわけで改行を CRLF に変えてから開いてみると, 無事開いた.

つまり,

  • Outlook Express は CRLF--[boundary] を区切りとして添付ファイルを切り出すときに,LF の前が本当に CR かどうか調べずに切り落としている
  • RFC2045 的に正しいメール形式であれば LF が CR を伴わずに出て来ることはないはずなので(って理解で合ってます?),その実装は一概には非難できない
  • Mew の保存ファイルはあくまで Mew のファイル形式であって,それが RFC822/RFC2045 準拠だとは誰も言ってないから,改行が CRLF じゃないからと言って非難できない (なんかいろいろ議論があって Mew では改行は LF に統一することになったらしい)

というわけで,誰も悪くないみたい.強いて言うなら Mew のファイルを無 理に eml だとして読み込んでいる私が悪いですかそうですか.

# ていうか eml 形式ってどこかにちゃんと定義されてるのかな

さてどうするか.あまり美しくないけど LF → CRLF 変換したテンポラリファ イルをかますしかないかな気味.

#!/bin/sh

tmpf=$1.$$.eml

cleantmp () {
  /bin/rm -f /tmp/$tmpf
  exit
}

/usr/bin/sed 's/$/^M/' /cygdrive/v/Mail/inbox/$1 > /tmp/$tmpf
/cygdrive/c/Program\ Files/Outlook\ Express/MSIMN.EXE "/eml:C:\\cygwin\\tmp\\$tmpf"
cleantmp

さあ何かつっこみどころ満載のスクリプトが来ましたよ.

まずえーと,^M って書いてるところは CR (0x0d) なので注意.

次に,cygwin だからなのか何なのかわかりませんが,シグナルを trap し ようとして「trap cleantmp INT」とか書くと,「trap: bad signal INT」 とか言われちゃうので,シグナル処理はさっくり無視してます.何かの拍子 にテンポラリファイルが残っちゃうかも知れないので注意.

あとですね,基本的動作としては,MSIMN.EXE (Outlook Express) を起動し ている行でそのまま MSIMN.EXE の終了まで待って,その後 cleantmp を呼 んでテンポラリファイルを消す,というつもりなのですが,既に MSIMN.EXE が動いている状態でこれを呼ぶとこの行では止まらないので,cleantmp が 即時呼ばれます.そのためタイミングの関係でごく稀にファイルを開き損ね ます.これが気になる人は,どうしましょうね.cleantmp の前に

sleep 3

とでも書いときましょか.うわあ,だせえ.

関連記事:
[2007-06-16-1] メール破産しそうな人から返信を受け取るコツ
[2005-11-22-1] Outlook Express で eml 形式のメールを開く

最終更新時間: 2007-08-20 03:32


Shingo W. Kagami - swk(at)kagami.org