Skip to content

Instantly share code, notes, and snippets.

@zed9h
Created July 17, 2009 04:07
Show Gist options
  • Save zed9h/148863 to your computer and use it in GitHub Desktop.
Save zed9h/148863 to your computer and use it in GitHub Desktop.
connect imap server to clenaup unwanted emails
#!/usr/bin/perl
use strict;
use warnings;
use Net::IMAP::Simple;
use Encode qw/encode decode/;
my $host = 'imap.server.com'
my $login = 'carlo.caputo';
my $password = '123456';
my $delete_pattern = 'Undeliverable: (maillist|useless|automatic)';
my $debug = 1;
my $n;
my $server = new Net::IMAP::Simple($host) or die $Net::IMAP::Simple::errstr;
$server->login($login, $password) or die $server->errstr;
print "remove undesirable email...\n" if $debug;
for my $box (qw(INBOX INBOX/assignment)) {
print "select $box...\n" if $debug;
defined($n = $server->select($box)) or die $server->errstr;
while ($n) {
print "header $box ($n)...\n" if $debug > 1;
my $header = $server->top($n) or warn $server->errstr;
@_ = map {s/\r$//;$_} @{$header};
while(@_) {
$_ = shift @_; s/[\n\r]+$//; print "| $_\n" if $debug > 2;
if(/: /) {
my ($field, $data) = ($`,$');
if($field =~ /^Subject/i) {
$_ = $data;
if(/^=\?[^\?]+\?[BQ]\?/) {
$data = '';
for(;;) {
$data .= decode('MIME-Header', $_);
last unless $_[0] =~ s/^\t//;
$_ = shift @_; s/[\n\r]+$//; print "+ $_\n" if $debug > 2;
}
$_ = $data;
}
print "$n) $_\n" if $debug > 2;
if(/$delete_pattern/) {
print " ^^^^^\n" if $debug > 2;
$server->delete($n) or warn $server->errstr;
}
print "\n" if $debug > 2;
last;
}
}
}
$n--;
}
}
print "expunge inbox...\n" if $debug;
$server->expunge_mailbox('INBOX/assignment') or die $server->errstr;
$server->expunge_mailbox('INBOX') or die $server->errstr;
for my $box ('Deleted Items', 'Spam', 'Trash') {
print "delete $box...\n" if $debug;
defined($n = $server->select($box)) or die $server->errstr;
foreach (1..$n) {
$server->delete($_) or warn $server->errstr;
}
print "expunge $box...\n" if $debug;
$server->expunge_mailbox($box) or die $server->errstr;
}
print "quit...\n" if $debug;
$server->quit() or warn $server->errstr;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment