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 писем уже приговорились :) :)