私はいくつかのcronジョブを設定しました、そして、彼らは電子メールにcrons結果を送ります。今、数ヶ月の間に私は膨大な数のEメールを蓄積しました。
今私の質問は私が私のメールボックスからすべてのそれらの電子メールを一掃することができる方法ですか?
/var/mail/username
ファイルを削除するだけで、特定のユーザーに関するすべてのEメールを削除できます。また、送信されているがまだ送信されていないEメールは/var/spool/mqueue
に保管されます。
別の方法:
mail -N
d *
quit
-N
メールを読むとき、またはメールフォルダを編集するときにメッセージヘッダの初期表示を禁止します。d *
すべてのメールを削除
ただ使用してください:
mail
d 1-15
quit
番号1から15までのすべてのメッセージを削除します。すべてを削除するには、d *
を使用します。
私はちょうどこれをubuntu 12.04.4で使っていました、そしてそれは魅力のように働きました。
例えば:
eric@dev ~ $ mail
Heirloom Mail version 12.4 7/29/08. Type ? for help.
"/var/spool/mail/eric": 2 messages 2 new
>N 1 Cron Daemon Tue Jul 29 17:43 23/1016 "Cron <eric@ip-10-0-1-51> /usr/bin/php /var/www/sandbox/eric/c"
N 2 Cron Daemon Tue Jul 29 17:44 23/1016 "Cron <eric@ip-10-0-1-51> /usr/bin/php /var/www/sandbox/eric/c"
& d *
& quit
それからあなたのメールをもう一度確認してください。
eric@dev ~ $ mail
No mail for eric
eric@dev ~ $
つまずいているのは、そのセッション中に変更をロールバックするために終了するためにx
またはexit
を使用していることです。
ワンライナー:
echo 'd *' | mail -N
削除するのではなく、ファイルを無効にすることができると思います。メールサービスがまだ有効な場合はファイルが作成されるためです。次のようなものが仕事をします
cat /dev/null >/var/spool/mail/tomlinuxusr
そして、この古いスレッドを目覚めさせて申し訳ありませんが、私は貢献できると感じました。
UNIX/Linux/Mac OS Xでは、ファイルをコピーして上書きすることができます。では、この解決策はどうでしょうか。
cp /dev/null /var/mail/root
「d」を使用するのではなく、「p」を使用しないでください。私は "p *"がうまくいくかどうかわからない。私は試しませんでした。あなたはできる;しかし、次のスクリプトを使用してください」
#!/bin/bash
#
MAIL_INDEX=$(printf 'h a\nq\n' | mail | egrep -o '[0-9]* unread' | awk '{print $1}')
markAllRead=
for (( i=1; i<=$MAIL_INDEX; i++ ))
do
markAllRead=$markAllRead"p $i\n"
done
markAllRead=$markAllRead"q\n"
printf "$markAllRead" | mail
メールサーバでcyrus/sasl/imapを使用している場合、指定された日数よりも古いメールボックス内のすべてのものを消去するための高速で効率的な方法の1つはcyrus/imap ipurgeコマンドを使用することです。例えば、これはユーザーから30日以上経過したvleoのすべてを削除する(注意してください!!)例です。あなたはcyrus(imapメール管理者)ユーザーとしてログインしなければならないことに注意してください。
[cyrus@mailserver ~]$ /usr/lib/cyrus-imapd/ipurge -f -d 30 user.vleo Working on user.vleo... total messages 4 total bytes 113183 Deleted messages 0 Deleted bytes 0 Remaining messages 4 Remaining bytes 113183