回答:
formail、procmailの一部(おそらくシステムで既に利用可能)は、メールボックスを取得し、それをメッセージに分割し、それぞれでコマンドを実行できます。manページから:
-s The input will be split up into separate mail messages, and piped
into a program one by one (a new program is started for every
part). -s has to be the last option specified, the first argument
following it is expected to be the name of a program, any other
arguments will be passed along to it. If you omit the program,
then formail will simply concatenate the split mails on stdout
again. See FILENO.
だからあなたは私があなたがこのようにしたいと思うことをすることができます:
formail -s /usr/sbin/sendmail -oi -t < /var/mail/root
ls /var/mail
; do formail -s / usr / sbin / sendmail -oi $ foo <./$foo; done」のように各ファイルをループしてローカルに配信します。
mutt -f /var/mail/www-data
その後、mutt ...
T.*
;b
Tはそれをタグ付けモードにし、。*はすべてのメッセージにタグ付けします。セミコロンはすべてのタグ付きメッセージに次のコマンドを適用し、最後にプロンプトが表示されるアドレスにメッセージを「バウンス」します。
記憶から、私はどちらかと思います
D.*
または
T.*
;d
その後、メールボックスを空にします。
/ var / spool / mail / xxx unixメールボックスファイルは、メールメッセージが順番に保持される単純なテキストファイルです。各メールメッセージは、送信者と受信日を含む「From」行(メッセージの一部ではありません)で始まり、メールヘッダーを取得してからメール本文を取得します。
基本的に、このようなFrom行を検出するファイルでループし、すべてのメッセージを抽出してから、python smtp moduleやcpanのperl Net :: SMTPモジュールなどのツールを使用して送信できます。
ターゲットが別のローカルメールボックスの場合、メッセージ(From行を含む)を追加するだけです。本当にルートをターゲットとするメッセージの取得も気にしない場合は、ルートメールボックス全体を別のメールボックスに追加することもできます。
それを行うスクリプトがいくつかあり、必要に応じて例が投稿されます。
問題は、メッセージの本当のターゲットを取得することである可能性があります。なぜなら、ルートメールボックスで終了した場合、おそらく最初からルートをターゲットにしているからです。