use strict; use warnings; use File::Copy; use File::Find; use Net::Netrc; use Net::SFTP; use MIME::Lite; use Getopt::Std; use Mail::Sender; my $server = 'X.X.X.X'; my $user = 'user'; my $sftp; my %args = ( ssh_args => { user => 'user', identity_files => ['/home/.ssh/id_rsa'], protocol => '2,1', debug => 1, } ); my $linux = "admin\@domain.net"; my $recipient1 = "recipient1\@domain.net"; my $recipient2 = "recipient2\@domain.net"; my $recipient3 = "recipient3\@domain.net>"; # write a log BEGIN { use CGI::Carp qw(carpout); my $errorlog = "/srv/logs/transferlog.txt"; open( LOG, ">$errorlog" ) or die("Unable to open $errorlog: $!\n"); print LOG "Errors:\n"; carpout(*LOG); } # create backup subfolder my @dt = localtime; my $subfolder_name = ( ( ( ( 1900 + $dt[5] ) * 100 + 1 + $dt[4] ) * 100 + $dt[3] ) * 100 + $dt[2] ) * 100 + $dt[1]; mkdir "/srv/OUT/$subfolder_name" or die "$subfolder_name: $!"; foreach my $from () { ( my $to = $from ) =~ s/.*\//\/HOME\//; # sftp file transfer $sftp = Net::SFTP->new( $server, %args ) or die "could not open connection to $server\n"; $sftp->put( $from, $to ) or die "could not upload $from\n"; # move files to the backup directory unless ( move( "$from", "/srv/OUT/$subfolder_name" ) ) { print STDERR "Oops! Couldn't move the file: $!"; } move "/srv/logs/transferlog.txt", "/srv/OUT/$subfolder_name"; sleep( 1 * 5 ); } # send a mail if transfer completed my $sender = new Mail::Sender { smtp => 'localhost', from => $linux }; $sender->MailFile( { to => "$recipient1, $recipient2, $recipient3", subject => 'data transfer', msg => 'data transfer should be completed', file => "/srv/OUT/$subfolder_name/transferlog.txt" } ); exit;