# #!/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);