Pizentios has asked for the wisdom of the Perl Monks concerning the following question:
###################################################################### +########################### ## Purpose: This script logs into the rbc ftp server and downloads dat +a files, then moves them ## ## to a shared folder so that they can be synced with the qui +ckbooks data. ## ## Author: Nick Peters ## ## Pre: Needs a couple of arguments at run time: + ## ## 1) What batch we want t +o run: ns (netset) or ## ## inl (inetlink). + ## ## 2) The Working Director +y we want to save the ## ## downloaded content t +oo. ## ## 3) The location of a config file containi +ng ## ## hashed user name and + passwords for the ## ## different batch runs +. ## ###################################################################### +########################### use warnings; use strict; use Net::FTPSSL; use Crypt::CBC; use Email::Send; use Email::Simple::Creator; my($day, $month, $year)=(localtime)[3,4,5]; $month = $month + 1; $year = $year + 1900; my $date = "$year-$month-$day"; my $log_name = "rbc_ftp_log_$date.log"; open (STDERR, ">>", $log_name); my $num_args = $#ARGV + 1; if ($num_args == 3) { my $batch = $ARGV[0]; my $work_dir = $ARGV[1]; my $config = $ARGV[2]; #time to read in the config file: open(CONFIG, "<$config") or die "Error Opening Config File!!!\n"; my @config_lines = <CONFIG>; close(CONFIG); my $cipher = Crypt::CBC->new( -key => 'xxxxxxxx', -cipher => 'Blow +fish',); my $user; my $pass; if ($batch eq "ns") { #we are doing a netset batch. $user = $cipher->decrypt($config_lines[0]); $pass = $cipher->decrypt($config_lines[1]); } if ($batch eq "inl") { #we are doing a inetlink batch. $user = $cipher->decrypt($config_lines[2]); $pass = $cipher->decrypt($config_lines[3]); } my $host = "xxx.xxxx.xxx"; my $ftp = Net::FTPSSL->new($host, Port => 21, Encryption => 'E', D +ebug => 1) or die "Cannot connect to $host: $@"; #connect to the ftp +server. #lets do the inl stuff first: $ftp->login($user, $pass) or die "Can't Login: ", $ftp->message; #change working directory on the remote host: $ftp->cwd("outbound/AAPA/") or die "Can't change working directory +: ", $ftp->message; my @dir_listing = $ftp->nlst() or die "Can't List Files.... ", $ft +p->message; $ftp->binary(); foreach (@dir_listing) { #loop through files in the directory and download the ones tha +t do not have downloaded in the name. if ( m/RPT0900P\.\d\d\d.downloaded/ ) { #already seen this file, output to log print STDERR "$date : Found File (Seen It Already): $_ \n" +; } else { #haven't seen this file before: print STDERR "Found File (New): $_ \n"; print STDERR "Changing Local Working Directory to: $work_d +ir\n"; chdir($work_dir) or die "Couldn't change local working dir +ectory!!!\n"; $ftp->get($_) or die "Couldn't Download New File: $_ Becau +se: ", $ftp->message; } } $ftp->quit; } else { print "Error, i need some command line arguments!!\n"; print "Usage: rbc_ftp.pl <batch> <working_directory> <config>\n"; print "<batch> is equal to what run we want to run, ie: 'ns' for N +etSet or 'inl' for I-NetLink\n"; print "<working_directory> is equal to the directory we want to sa +ve the downloaded files in.\n"; print "<config> is equal to the location of the config file.\n"; } my $mailer = Email::Send->new( { mailer => 'SMTP::TLS', mailer_args => [ Host => 'smtp.gmail.com', #Port => 587, User => 'xxx.xxxx@xxxx.xx', Password=> 'xxxxxxxx', Hello => 'localhost', ] } ); my $email = Email::Simple->create( header => [ From => 'xxxx.xxxx@xxxx.xx', To => 'xxxxxx@xxxx.xxx', Subject => 'RBC FTP Status:', ], body => 'This is a test.....', ); eval { $mailer->send($email) }; die "Error sending email: $@" if $@; close(STDERR);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Net::FTPSSL + TLS Handshake Fail
by Illuminatus (Curate) on Sep 28, 2012 at 18:39 UTC | |
by Pizentios (Scribe) on Sep 28, 2012 at 18:48 UTC | |
by Pizentios (Scribe) on Oct 01, 2012 at 19:49 UTC | |
by Pizentios (Scribe) on Oct 29, 2012 at 14:24 UTC |