いくつかの設定ミスにより、/ var/mail/rootと/ var/mail/www-dataにたくさんのメールがあります
これらのファイルを「ループ」して、各メールをもう一度送信するにはどうすればよいですか?
formail 、procmailの一部(そしておそらくシステムですでに利用可能)は、メールボックスを受け取り、それをメッセージに分割してから、それぞれに対してコマンドを実行できます。マニュアルページから:
-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
mutt -f /var/mail/www-data
その後、mutt内で...
T.*
;b
Tはそれをタグ付けモードにし、。*はすべてのメッセージにタグ付けします。セミコロンは、タグ付けされたすべてのメッセージに次のコマンドを適用し、最後にbがメッセージを要求するアドレスに「バウンス」します。
記憶から、私はどちらかだと思います
D.*
または
T.*
;d
その後、メールボックスを空にします。
/ var/pool/mail/xxx unixメールボックスファイルは、メールメッセージが順番に保持される単純なテキストファイルです。各メールメッセージは、送信者と受信日を含む「From」行(メッセージの一部ではありません)で始まり、次にメールヘッダー、次にメール本文が表示されます。
基本的に、このようなFrom行を検出するファイルをループし、すべてのメッセージを抽出してから、python smtpモジュールまたはcpanのPerlNet :: SMTPモジュールなどのツールを使用してメッセージを送信できます。
Targetが別のローカルメールボックスである場合は、そこにメッセージ(From行を含む)を追加できます。ルートを実際に対象とするメッセージを取得することも気にしない場合は、ルートメールボックス全体を別のメールボックスに追加することもできます。
私はそれを行ういくつかのスクリプトを持っている必要があり、必要に応じて例を投稿します。
問題は、メッセージの実際のターゲットを取得することである可能性があります。これは、メッセージがルートメールボックスで終了した場合、おそらく最初からルートをターゲットにしていたためです。