KsI-wiki online documents

Tcl-expect-mail

Материал из Ksimute

Перейти к: навигация, поиск

Задача тривиальная - удалить 500 000 писем с почтового сервера. POP3

Народ в интернетах рекомендует удалять перл NET:POP3

 ksi:~$ cat nikita.pl 
 #!/usr/bin/perl -w
 
 use Net::POP3;
 $pop = Net::POP3->new("mymail.com");
 
 if ($pop->login('user@domain.com', "megapassword") > 0) {
 
        my $msgnums = $pop->list; # hashref of msgnum => size
        foreach my $msgnum (keys %$msgnums) {
                $pop->delete($msgnum);
        }
 }
 
 $pop->quit;

Медленно это и неэффективно а именно создание хэша $pop->list; # hashref of msgnum => size Причем POP3 протокол позволяет удалять по-одному без вызова списка.

Написал на expect/tcl

 stx100:~# cat nikita.expect 
 
 #!/usr/bin/expect
 
 spawn /usr/bin/telnet mymail.com 110
 expect "+OK Microsoft Exchange" {send "USER vasya.user@mymail.com\n" }
 expect "+OK" {send "PASS megasecurepass\n" }
 
 for {set x 1} {$x<500000} {incr x} {
         expect "+OK" {send "DELE $x\n" }
 }
 expect "+OK" {send "QUIT\n"}

Вообще лучше удалять порциями по 10 000. т.е.вложенный цикл сделать.

P.S. про интерфейс IMAP я знаю и про http://search.cpan.org/~plobbes/Mail-IMAPClient-3.29/lib/Mail/IMAPClient.pod#delete_message тоже, но пока мы тут болтаем 30 000 писем уже приговорились :) :)