_roro: Frage zu Mailserver POP3

Beitrag lesen

Moin,

jetzt suche ich ein programm, mit dem ich mich per POP3 einloggen kann und diese mails auf meinem klient laden kann.

hat jemand ne idee?

Klar, immer. Net::POP3

--roro

Mails vom POP-Server abholen und lokal abspeichern
Untenstehends Script ist so geschrieben, dass es universell verwendet werden kann. Benutzer, Passwort, POP3-Host und lokales Verzeichnis werden als Parameter übergeben. Optional ist der Schalter -d, wird dieser notiert, werden die Mails auf dem Server gelöscht nach dem Download.

Vorteilhaft wird das Script über eine Batchdatei aufgerufen, so ist es auch möglich, Mails von mehreren Mailkonten abzuholen.

#!/usr/bin/perl

Mails vom pop3 downloaden

Rolf Rost

11.2006

########################################################################################################
use strict;
use Getopt::Std;
use Net::POP3;
use vars qw($opt_v $opt_u $opt_p $opt_d $opt_h);

Schalter deklarieren

getopts('dv:u:p:h:');

if(!$opt_v or !$opt_u or !$opt_h){&usage}

Constructors

my $pop = Net::POP3->new($opt_h);

my $i = 0;
if ($pop->login($opt_u, $opt_p) > 0) {
 my $msgnums = $pop->list; # hashref of msgnum => size
 # Startnummer ermitteln
 my $nr = number();

foreach my $msgnum (keys %$msgnums) {
  print "Schreibe Mail $nr ...\n";

my $msg = $pop->get($msgnum);
  open OUT, ">$opt_v/$nr" or die "Kann Datei $opt_v/$nr nicht anlegen";
  print OUT @$msg;
  close OUT;
  $pop->delete($msgnum) if $opt_d;
  $i++;
  $nr++;
 }
}
$pop->quit;

if($i){ print "$i neue Nachrichten wurden in $opt_v gespeichert.\n" }
else{ print "Keine neuen Mails...\n" }

exit;
########################################################################################################

Maximale Nummer im Downloadverzeichnis ermitteln

sub number{
 opendir DIR, $opt_v or die("Das angegebene Verzeichnis existiert nicht!");
 my @files = grep { /^\d+$/ } readdir DIR;
 closedir DIR;
 if(!@files){return 1}
 else{
  @files = sort{ $a <=> $b }@files;
  return ++$files[-1];
 }
}

Anzeigen der Schalter

sub usage{
print<<"123";
Script $0 ermoeglicht das download aller Mails von einem POP3 Konto.
Die downgeloadeten Mails werden fortlaufend numeriert im angegebenen Verzeichnis abgelegt.
Benutzung mit den folgenden Schaltern:
-v  lokales Verzeichnis
-u  Benutzername des POP3 Kontos
-p  Passwort zum POP3 Konto
-h  Hostname des POP3 Servers
[-d]optionaler Schalter, ist -d angegeben werden die Mails auf dem Server geloescht
123
exit;
}
__END__
Zum Abrufen der Mails von einem POP3-Konto aus einer Batchdatei heraus ist eine Zeile wie folgt zu notieren:

perl mail110.pl -v d:/mail/meinmailverz -u meinbenutzername -p meinpasswort -h pop3.hostname -d