web-dev-qa-db-ja.com

/ var / mail / rootを再度送信するにはどうすればよいですか?

いくつかの設定ミスにより、/ var/mail/rootと/ var/mail/www-dataにたくさんのメールがあります

これらのファイルを「ループ」して、各メールをもう一度送信するにはどうすればよいですか?

12
Max

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
17
larsks
mutt -f /var/mail/www-data

その後、mutt内で...

T.*
;b

Tはそれをタグ付けモードにし、。*はすべてのメッセージにタグ付けします。セミコロンは、タグ付けされたすべてのメッセージに次のコマンドを適用し、最後にbがメッセージを要求するアドレスに「バウンス」します。

記憶から、私はどちらかだと思います

D.*

または

T.*
;d

その後、メールボックスを空にします。

3
James Green

/ var/pool/mail/xxx unixメールボックスファイルは、メールメッセージが順番に保持される単純なテキストファイルです。各メールメッセージは、送信者と受信日を含む「From」行(メッセージの一部ではありません)で始まり、次にメールヘッダー、次にメール本文が表示されます。

基本的に、このようなFrom行を検出するファイルをループし、すべてのメッセージを抽出してから、python smtpモジュールまたはcpanのPerlNet :: SMTPモジュールなどのツールを使用してメッセージを送信できます。

Targetが別のローカルメールボックスである場合は、そこにメッセージ(From行を含む)を追加できます。ルートを実際に対象とするメッセージを取得することも気にしない場合は、ルートメールボックス全体を別のメールボックスに追加することもできます。

私はそれを行ういくつかのスクリプトを持っている必要があり、必要に応じて例を投稿します。

問題は、メッセージの実際のターゲットを取得することである可能性があります。これは、メッセージがルートメールボックスで終了した場合、おそらく最初からルートをターゲットにしていたためです。

0
kriss