2010年3月25日

[postfix-jp: 3757][FYI] mailq に溜っているメールを無理矢理 Maildir 形式に変換

松元@どっかの大学です。

うちの学科の教職員にメールサーバ障害で相談されました。

その教職員は学科のメールサーバから 研究室のメールサーバに ~/.forwardで
転送してます。

それで、研究室のメールサーバがこけたんだが、復旧まで時間がかかるので上

流の学科メールサーバに詰まっているメールが読みたい。という事でした。

少量なら 手作業で送ろうと思ったので、mailqに溜っているメールが300通近
くあったため、悩んでみたのですが、とりあえずこれでどうにかなりました。

** 以下は全て無保証 **

OS: Solaris10 / SPARC
postfix: 自前make, postfix-2.5.9
pop/imapサーバ: 自前make, dovecot-1.2.9

-- tmp.pl --
$flag=0;

while(<STDIN>)
{
if(/^\*\*\* MESSAGE CONTENTS deferred\/.\/.......... \*\*\*\n/)
{
$flag=1;
next;
}
if(/^\*\*\* HEADER EXTRACTED deferred\/.\/.......... \*\*\*/)
{
$flag=2;
}

print if($flag==1);
}
-- --

該当ユーザの ~/.forwardを解除する。

$ mailq > mail.txt

関係ないQUEUEを消す。また、QUEUE-IDに「*」が付いている場合があるので、
「*」を消す。

$ vi mailq.txt

$ mkdir NEW
$ cd NEW

「Mar」でgrepしているのは3月だから。適切に変更ください。
$ grep " Mar " ../mailq.txt | awk '{print "/usr/sbin/postcat -q " $1 " | perl ../tmp.pl > " $1 }'

# QUEUE-IDのファイルが出来る。

$ grep -n ^Delivered-To * > ../DelCheck.txt
$ less ../DelCheck.txt

間違いが無いか確認し、該当するユーザの Maildir/new にコピーする。chownを忘れずに。

次にQUEUEを消す

$ grep " Mar " ../mailq.txt | awk '{print "/usr/sbin/postsuper -d " $1 }' | sh

なお、上記の方法でMaildir/newにつっこんだ場合、通常のメールと比べて以
下のヘッダが不足するみたいだが、とりあえずdovecot + squirrelmail で吸
い上げた限り、本文は問題なく読めた。外の部分は知らないので、念のため。

--
Return-Path: <example@xxxxx>
X-Original-To: <example2@xxxxx>
Delivered-To: <example3@xxxxx>

_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list


投稿者 xml-rpc : 2010年3月25日 21:02
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/94368
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。