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