- # open mail file
- open(VOTES, "<$filename")
- or die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $filename)) . "\n\n";
-
- # read all mails
- my $i = 0;
- while (<VOTES>) {
- if (/$config{mailstart}/) {
- $i++;
+
+ my $readfilename;
+
+ if ($caller==0) {
+ # called from uvvote.pl: use configured mailbox file
+ $readfilename = $config{votefile};
+ } else {
+ # else use filename provided in function call
+ $readfilename = $filename;
+ # and create backup archive filename
+ $filename .= '.processed';
+ }
+
+ my $mgr = Mail::Box::Manager->new;
+ my $folder;
+
+ eval{
+ $folder = $mgr->open( folder => $readfilename,
+ create => 0,
+ access => 'rw',
+ type => $config{mailboxtype},
+ expand => 'LAZY',
+ remove_when_empty => 0,
+ );
+ };
+ die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $readfilename)) . "\n\n" if $@;
+
+ # Iterate over the messages.
+ foreach (@$folder) {
+ my $mail = $_->string;
+ $_->delete();
+ my $fromline = 'From ';
+ if ($mail =~ /From: .*?<(.+?)>/) {
+ $fromline .= $1;
+ } elsif ($mail =~ /From:\s+?(\S+?\@\S+?)\s/) {
+ $fromline .= $1;
+ } else {
+ $fromline .= 'foo@bar.invalid';