/ / 最新

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 形式のメールを開く
[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Jeferson] Me dull. You smart. That\'s just what I ... (2013-07-03 13:53:09)

最終更新時間: 2009-01-04 15:31


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