#
#!/usr/bin/perl -w
# Upload FTP
use Net::FTP; use Net::SMTP; use strict;

## Pfade und Dateien
my $tmpLocalPath = "c:/tmp/ftp" ;
my $QuellDatei = "DatenZuSenden.txt" ;

## Maileintraege
my $email = 'Adresse@beispiel.de'; my $MailSrv = "MailServer.beispiel.de" ; my $text ;
my $ErrBetr = "!!!-FEHLER-!!!-FEHLER-!!! Upload nicht erfolgreich ";

## FTP-Eintraege
my $hostname = "ftp.test.de"; my $user = 'test'; my $passwort = 'geheim'; 
my $modus = "binary"; # binary oder ascii
my $FTP_ZielOrnder ="/Pfad/zur/Dateiablage" ;

## Unterfunktion zum Mail versenden, einfach so lassen und benutzen
sub MailSchicken ($$$) {
        my $email = shift; my $subject = shift; my $body = shift;
        ## Perl-eigenes SMPT-Modul oeffnen
        my $smtp = Net::SMTP->new("$MailSrv");
        unless ( defined $smtp ) {
                print "Fehler beim Verbinden zum Mailsrv $MailSrv $!\nFehler: $@\n" ;
        }
        else {
                print "Mail schicken\n";
                ## Mail-Header erzeugen:
                $smtp->mail("$email"); $smtp->to("$email");
                $smtp->data(); $smtp->datasend("To: $email\n");
                $smtp->datasend("From: $email\n");
                $smtp->datasend("Subject: $subject\n");
                $smtp->datasend("Date: " . localtime() . "\n");
                $smtp->datasend("\n");

                ## Textkoerper einfuegen
                $smtp->datasend("$body");
                $smtp->dataend(); $smtp->quit;
        }
}


print "In Verzeichnis $tmpLocalPath gehen\n\n";
## wenn es nicht geht, schick eine Mail mit Fehlermeldung $! und beende das Programm exit()
unless (chdir ("$tmpLocalPath") ) {
        $text = "Kann nicht in Arbeitsverz $tmpLocalPath wechseln: \n\n$!\n\n"; print "$text";
        ## Funktion wird Emailadresse, Betreff der Mail und der Textkoerper uebergeben
        &MailSchicken ($email , $ErrBetr , $text); exit();
}


print "FTP-Uebertragung starten\n###################\n\n" ;
print "Verbindung oeffnen\n" ;
my $ftp = Net::FTP->new("$hostname", Timeout => 5) ;
if (!$ftp) {
        $text = $text . "Kann sich nicht mit ftp-Server verbinden: \n\n$@\n\n" ;
        print "$text ";
        &MailSchicken ($email , $ErrBetr , $text); exit();
}
else { print "Verbunden mit $hostname \n\n" ; }

print "Verbindung authorisieren\n" ;
unless ( $ftp->login($user, $passwort) ) {
        $text = $text . "Konnte nicht authoriseren an Server \"$hostname\" als \"$user\"\n\n" . $ftp->message . "\n\n" ;
        print $text ;
        &MailSchicken ($email , $ErrBetr , $text); exit();
}
else {  print "Angemeldet als $user\n\n" ; }

# EndOfLine bleibt mit "bin" unveraendert:
print "Auf $modus umschalten\n";
$ftp-> $modus ;

unless ( $ftp->cwd("$FTP_ZielOrnder") ) {
      $text = $text . "FEHLER!!!!!!!!!: Kann nicht in $FTP_ZielOrnder wechseln\n\n" . $ftp->message . "\n\n"  ;
      print $text ;
      &MailSchicken ($email , $ErrBetr , $text); exit();
}

my $text2 = "Folgende Datei wird auf FTP-Server hochgeladen:\n";
print $text2;
$text = $text . $text2 . "\n\n";

unless ( $ftp->put($QuellDatei) ) {
        $text = $text . "FEHLER!!!!!!!!!: Datei $QuellDatei nicht uebertragen\n\n" . $ftp->message . "\n\n" ; print $text ;
        &MailSchicken ($email , $ErrBetr , $text); exit();
}
## Kann zur Auswertung genutzt werden, was nun auf dem Server liegt
my @ls_check = $ftp->dir();

$ftp->quit;

$text = $text . "\nFolgende Dateien liegen nun auf $hostname unter $FTP_ZielOrnder:\n\n" ;
print "$text";
foreach my $FTP_Dir_zeile (@ls_check) {
        chomp ($FTP_Dir_zeile);
        $text = $text . $FTP_Dir_zeile ."\n" ;
        print "$FTP_Dir_zeile\n";
}

&MailSchicken ($email , "Datei $QuellDatei hochgeladen\n" , $text);

JoernBruns/perl/FtpUebertragung (zuletzt geändert am 2008-08-23 20:05:24 durch JoernBruns)