[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[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@example.ac.jp>
X-Original-To: <example2@example.ac.jp>
Delivered-To: <example3@example.ac.jp>

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

Follow-Ups
[postfix-jp: 3760] Re: [FYI] mailq に溜っているメールを無理矢理 Maildir 形式に変換, YAMAGUCHI Takanori

[検索ページ] [Postfix-JP ML Home]