home «前の日記(2005-11-16) 最新 次の日記(2005-11-18)»

いろいろ
Seize the day.

2004|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|07|09|10|

2005-11-17 [長年日記]

[comp] メールスプールに溜ったメールを救い出す方法 (OE ユーザ向け)

Windows のメールソフトウェアが調子悪くなって,なぜかメールを受信できなくなっちゃうことがある.今回職場で起こったのもそんなケース.不具合の原因は不明で,メールサーバ側に問題がある可能性もなくはないのだが,他のユーザはみな正常に使えていることと,クライアントマシンにバッドセクタがあったり何かと調子悪いことから,クライアントのせいが濃厚 (だーかーらー早く HDD 換えろと何度(ry

とりあえず管理者な人が,メールサーバのスプールに溜ったメールを退避したとする.今から書くのはこの退避したメールを Windows でどうやって読むかという問題.不具合の解決とかはとりあえず無視ね(ぉ

退避したメールは mbox 形式の一塊のファイルになっている.これを Windows マシンで開く.Meadow かなんかがあれば文字も化けないし最高だが,とりあえずワードパッドで開くようにいう.メモ帳は改行が正しく認識されないので使わない.

たくさんのメール (文字化けしている) が concatenate されていることを説明する.さらに,メールとメールの切れ目が「空行 + From 行」となっていることを説明する.ヘッダの中に埋もれた From 行とかは,空行を伴ってないので無視.で,このデリミタごとにメールを切り出して別々のファイルとして保存させる.

最後に,切り出したファイルの拡張子を eml にする.これで,ファイルをダブルクリックすれば Outlook Express が立ち上がってメールの中身が読める.添付ファイルも普通に開ける.うまく読めない場合は切り出し時に何やら失敗している可能性が高い.
なお,拡張子を eml にするという技は,MH 形式で保存されたメールを Windows で読む時にも便利.

とまあ今回は手動でやってもらったんだけど(ぉ,それはメールがたったの数個だったからで,これが 10 個 20 個とかになったら,スクリプトでも書いたほうが親切というものだろう.
というわけで,書いてみた.早く書けばよかった.
#!/usr/local/bin/perl
# $Id: mbox2eml,v 1.1 2005/11/17 20:53:21 nao Exp $
 
$cnt = 0;
$flag = 1;
 
while( <> ){
    if ( $flag && /^From\ .*/ ){
	close IN if fileno(IN);
	$cnt++;
	open(IN, ">$cnt.eml");
	next;
    }
    print IN;
    $flag = /^$/;
}
 
close IN;
追記 (2007-04-06): 生成された eml ファイルに対してさらに mailutime コマンドをかけるとソートのときさらに便利 (タイムスタンプがメールの受信日時になる).

追記 (2007-08-29): bug fixed.
このエントリーをはてなブックマークに追加 はてなブックマーク数 はてなブックマークコメント   このエントリーを livedoor クリップに追加 livedoor クリップ数 このエントリーを del.ici.ous に追加 このエントリーを buzzurl に追加 buzzurl クリップ数

お名前:
E-mail:
コメント:
[TrackBack URL: http://nao.s164.xrea.com/td/tb.rb/20051117]
[(注) スパム対策のため,言及リンクのないトラックバックは受け付けていません.]
本日のリンク元
検索

以下の広告はサーバによって自動的に挿入されています.


Copyright © 2004-2006, nao. All rights reserved.