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