Add option to read from Maildir.
Parse a mailbox by virtue of Mail::Box and add "mailboxtype" to usevote.cfg. Picked from upstream. Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
		
							parent
							
								
									0618b624e9
								
							
						
					
					
						commit
						34809a2a81
					
				
					 3 changed files with 42 additions and 34 deletions
				
			
		| 
						 | 
				
			
			@ -9,6 +9,7 @@ use UVmessage;
 | 
			
		|||
use MIME::QuotedPrint;
 | 
			
		||||
use MIME::Base64;
 | 
			
		||||
use MIME::Parser;
 | 
			
		||||
use Mail::Box::Manager;
 | 
			
		||||
use POSIX qw(strftime);
 | 
			
		||||
 | 
			
		||||
use vars qw($VERSION);
 | 
			
		||||
| 
						 | 
				
			
			@ -118,6 +119,41 @@ sub process {
 | 
			
		|||
      close (UIDLCACHE) or print STDERR UVmessage::get("READMAIL_UIDL_CLOSE") . "\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $pop->quit();
 | 
			
		||||
 | 
			
		||||
  # Mailbox / Maildir
 | 
			
		||||
  } else {
 | 
			
		||||
 | 
			
		||||
    my $mgr = Mail::Box::Manager->new;
 | 
			
		||||
    my $folder;
 | 
			
		||||
 | 
			
		||||
    eval{
 | 
			
		||||
      $folder = $mgr->open( folder => $config{votefile},
 | 
			
		||||
                create => 0,
 | 
			
		||||
                access => 'rw',
 | 
			
		||||
                type   => $config{mailboxtype},
 | 
			
		||||
                expand => 'LAZY',
 | 
			
		||||
              );
 | 
			
		||||
    };
 | 
			
		||||
    die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $config{votefile})) . "\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';
 | 
			
		||||
      }
 | 
			
		||||
      $fromline .= ' ' . localtime() . "\n";  #strftime ('%a %b %d %H:%M:%S %Y', localtime) . "\n";
 | 
			
		||||
      push (@mails, $fromline . $mail);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # make archive of all mails
 | 
			
		||||
  my $fileproblem = 0;
 | 
			
		||||
  open (VOTES, ">$filename") or $fileproblem = 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -131,26 +167,6 @@ sub process {
 | 
			
		|||
                      (FILE => $filename)) . "\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    $pop->quit();
 | 
			
		||||
 | 
			
		||||
  } else {
 | 
			
		||||
    # 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++;
 | 
			
		||||
      }
 | 
			
		||||
      $mails[$i] = ($mails[$i] || "") . $_;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # close mail file
 | 
			
		||||
    close(VOTES);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  foreach my $mail (@mails) {
 | 
			
		||||
    next unless $mail;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,6 +90,8 @@ pop3 = 1
 | 
			
		|||
# Mailbox, in der die zu verarbeitenden Mails liegen (falls pop3=0)
 | 
			
		||||
votefile = votes
 | 
			
		||||
 | 
			
		||||
# Typ der Mailbox (mbox, maildir)
 | 
			
		||||
mailboxtype = mbox
 | 
			
		||||
# POP3-Einstellungen fuer Abruf der eingehenden Wahlscheine:
 | 
			
		||||
# Server, Port, Benutzername, Passwort
 | 
			
		||||
pop3server = 127.0.0.1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								uvvote.pl
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								uvvote.pl
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -135,16 +135,6 @@ if ($clean) {
 | 
			
		|||
  my $thisresult = "ergebnis-" . $ext;
 | 
			
		||||
  my $thisvotes = "stimmen-" . $ext;
 | 
			
		||||
  
 | 
			
		||||
  # POP3 not activated: rename votes file
 | 
			
		||||
  unless ($config{pop3}) {
 | 
			
		||||
    print UVmessage::get("VOTE_RENAMING_MAILBOX"), "\n";
 | 
			
		||||
    rename ($config{votefile}, "$config{tmpdir}/$thisvotes")
 | 
			
		||||
       or die UVmessage::get("ERR_RENAME_MAILFILE") . "$!\n\n";
 | 
			
		||||
  
 | 
			
		||||
    #  wait, so that current mail deliveries can finalize
 | 
			
		||||
    sleep 2;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # open results file
 | 
			
		||||
  open (RESULT, ">>$config{tmpdir}/$thisresult")
 | 
			
		||||
     or die UVmessage::get("VOTE_WRITE_RESULTS", (FILE=>$thisresult)) . "\n\n";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue