わけあってメールサーバー上の特定アカウントのメールを削除する必要が出てきた。
普通の人でメールソフトを使っていれば受信すれば特に気にすることも無くサーバー上から削除されるけど、そうはいかないので面倒だ。
普段はnpopというソフトでメッセージの一覧を取得し、不要なメッセージを削除しているんだけど、問題のアカウントに関してはnpopがエラーを吐いて落ちてしまい、削除することが出来ない(メッセージの一覧を取得中に落ちるため)。
他のソフトを試そうとしてもなかなか使いやすそうなソフトが見当たらない。
npopに出会う前はtelnetクライアントでメールサーバーの110番ポート(pop3ポート)に接続し、ユーザー認証から全て手動でコマンドを入力して行っていた。
その方法だと多数のメールを一括で削除することが出来ず、削除したいメッセージの数だけdeleコマンド+メッセージ番号の入力が必要で、途中で間違うこともあった。
その後npopを見つけたので楽が出来るようになったが、今回はその頼りになるnpopが使えない。
そこで結局メールサーバーの110番ポートにtelnetで接続して操作することにした。
ただし、コマンドの入力に関しては事前にdele xxx(メッセージ番号)を全てテキストデータで用意しておき、それをコマンドラインから貼り付けることにした。
テキストデータの作成はエクセルとテキストエディターで行った。
最初にエクセルの左上のセルに”dele”と入力し、その右隣のセルに”1″を入力しておく。
次に一つ下の一番左のセルに”dele”のセルをコピーし、その右隣には”=A2+1″と入力すると見た目では”2″と入るので、この二つのセルをコピーし、必要数分下に貼り付ける。
そうすると
dele 3
dele 4
・
・
・
と並ぶ。
ただこれらは”dele”と数字の間にtabが入っているので、そのままコピーしてコマンドラインに貼り付けると全てエラー(”-ERR Unknown command.”)となってしまう。
そこで一度テキストファイルに貼り付けてtabを半角スペースに変換する必要がある。
そうして出来上がった文字列をコピーしてコマンドラインに貼り付けると、今度は”+OK Marked to be deleted.”と表示される筈。
エラーが一つも出なければそのまま”quit”と入力すると”dele”コマンドが実際に実行され指定したメールが削除された。
今回作ったテキストデータは便利なので保存しておいて今後も使うことにしよう(汗)。
でもまぁ、こんなことする人は殆どいないんだろうなぁ(汗)。
5 comments to this article
ちょろ
on 2015 年 4 月 8 日 at 4:33 PM -
別件で作ってあったの編集しただけだけどPerlならこんな感じ。
ActivePerlやCygwin上で動くかはMail::POP3Clientがどうか解らないので謎。
use strict;
use warnings;
use Mail::POP3Client;
my $server = ‘pop.example.com’;
my $account = ‘hoge@example.com’;
my $password = ‘hogehoge’;
my $protocol = ‘pop3’;
my $pop3 = new Mail::POP3Client(
USER => $account,
PASSWORD => $password,
HOST => $server,
DEBUG => 0
);
my $mail_count = $pop3->Count;
for (my $i =1; $i Delete($i);
}
$pop3->Close();
exit;
tan
on 2015 年 4 月 8 日 at 6:33 PM -
>ちょろさん
をを!こんなスクリプトが!
まぁ滅多にやらないことなので、検証も出来ませんけど参考にさせて貰います。
ちょろ
on 2015 年 4 月 10 日 at 3:20 PM -
あ、forがおかしい。
for (my $i = 1; $i Delete($i);
}
こうかな。
件名や本文取ったり、マルチパート処理もノウハウあるので何かの時は相談のれますよー
tan
on 2015 年 4 月 10 日 at 3:21 PM -
>ちょろさん
なにかあったらお願いしますねー(汗)
ちょろ
on 2015 年 4 月 10 日 at 3:21 PM -
あ・・・<がエスケープされてるんだw
for (my $i =1; $i <= $mail_count; $i++) {
$pop3->Delete($i);
}
これでどうだ