#!/usr/bin/perl # REMEMBER THAT YOU NEED TO EDIT THE SUBROUTINE "filter" BEFORE # DEPLOYING! use strict; use Mail::POP3Client; my %midcache; my @accounts = ( { USER => "username", AUTH_MODE => "PASS", PASSWORD => "sekrit!", HOST => "pop3.myisp.com" }, # More accounts here. ); %midcache = map {chomp; $_ => 1} `tail -50 $ENV{HOME}/.msgidcache`; $|=1; for (@accounts) { print "\nConnecting to $$_{HOST}..."; my $pop = new Mail::POP3Client (%$_); unless ($pop) { warn "Couldn't connect\n"; next; } my $count = $pop->Count; if ($count <0) { warn "Authorization failed"; next; } print "\n"; print "New messages: $count\n"; my %down = map {$_ => 1} (1..$count); my @mails; for my $num (1..$count) { print "\n"; my @head = $pop->Head($num); for (@head) { /^(From|Subject):\s+(.*)/i and do { print "$1\t$2\n"; $mails[$num]->{$1} = $2; }; /^Message-Id:\s+(\S+)/i and do { if (exists $midcache{$1}) { print "(Duplicate)\n"; delete $down{$num}; $mails[$num]->{mid} = $1; $pop->Delete($num); } $midcache{$1}++; } } } next unless keys %down; my @tocome = sort {$a <=> $b} keys %down; print "Downloading: @tocome\n"; for my $num (@tocome) { my @mail; print "Downloading message $num (", $mails[$num]->{From}, ":", $mails[$num]->{Subject}, ")..."; @mail = $pop->Retrieve($num); $_ .= "\n" for @mail; my $now = scalar localtime; $mail[0] =~ s/Return-Path:\s+<([^>]+)>/From $1 $now/; print "\n"; if (!@mail) { print "Ugh, something went wrong!\n"; delete $midcache{$mails[$num]->{mid}}; next; } filter(@mail); $pop->Delete($num); } $pop->Close; } open OUT, ">$ENV{HOME}/.msgidcache" or die $!; print OUT "$_\n" for keys %midcache; close OUT; use Mail::Audit; use Mail::Send; sub filter { my $folder ="$ENV{HOME}/mail/"; my @data = @_; my $item = Mail::Audit->new(data => \@data, noexit => 1); #line 90 "a file which you should have edited" xxx xxx you_have_not_added_your_filter_here_yet }