#!/usr/bin/perl use warnings; use strict; # works but.................. # needs some taint checking if used with CGI # You would be wise to consider what happens if you try: # http://www.you.com/cgi-bin/sendattach.pl?`myonewordcommandwithoutargs` # and consider if you really want to give the whole world access to # execute arbitrary commands on your server. # Put the name of your file here my $filename = shift || $0 ; # Location of sendmail program on your host my $mailprog = '/usr/sbin/sendmail'; # The email where you want the attachment to be sent to. my $to = 'zentara@zentara.zentara.net'; # Who the message is from my $from = 'zentara@zentara.zentara.net'; # Subject of the email. my $subject = "Attachment!"; # Type your message here. my $message = "This is an attachment."; # Confirmation message that the email has been sent. my $confirm_message = "The email and attachment has been sent!"; my $boundary = 'qwertry'.time; ###################################################### # Encode according to file extention. my $content_type = "text/plain; charset=\"us-ascii\";"; #default my $encoding; if ( $filename =~ /\.gif$/i ){ $content_type = "image/gif; name=\"$filename\"; $encoding = 'base64';"} if ( $filename =~ /\.jpg$/i ){ $content_type = "image/jpeg; name=\"$filename\"; $encoding = 'base64';"} if ( $filename =~ /\.zip$/i ){ $content_type = "application/zip; name=\"$filename\"; $encoding = 'base64';"} if ( $filename =~ /\.html$/i || $filename =~ /\.htm$/i ){ $content_type = "text/html; charset=\"us-ascii\";";} if ( $filename =~ /\.xls$/i ){ $content_type = "application/msexcel; charset=\"us-ascii\";";} if ( $filename =~ /\.txt$/i || $filename =~ /\.dat$/i || $filename =~ /\.doc$/i || $filename =~ /\.pl$/i || $filename =~ /\.cgi$/i ){ $content_type = "text/plain; charset=\"us-ascii\";";} ############################################# # Get the attachment my $b64image; my @file; if($encoding){ open( IMAGE, "$filename"); binmode(IMAGE); undef $/; my $rawimage = ; $/ = "\n"; close IMAGE; $b64image = &encode_base64($rawimage); chomp $b64image; }else{ # Doesn't need encoding. (Plain text type of document) open( FILE, $filename ); @file = ; close(FILE); } ############################################# # Send Email open( MAIL, "| $mailprog $to" ) || die("$0: Fatal Error! Cannot open sendmail:: $!\n"); print MAIL "Reply-to: $from\n"; print MAIL "From: $from\n"; print MAIL "To: $to\n"; print MAIL "Subject: $subject\n"; print MAIL "Mime-Version: 1.0\n"; print MAIL "Content-type: multipart/mixed; boundary=\"======================_$boundary==_\"\n"; print MAIL"--======================_$boundary==_ Content-Type: text/plain; charset=us-ascii"; print MAIL "\n\n"; print MAIL "$message\n\n"; print MAIL "--======================_$boundary==_ Content-Type: $content_type\n"; if($encoding){ print MAIL "Content-Transfer-Encoding: $encoding\n"; print MAIL "Content-Disposition: inline; filename=\"$filename\"\n\n"; print MAIL $b64image; }else{ print MAIL "Content-Disposition: inline; filename=\"$filename\"\n\n"; foreach my $line (@file) { print MAIL "$line"; } } print MAIL "\n\n\n"; print MAIL "--======================_$boundary==_--"; close(MAIL); ####################################### # Confirm Mail has been sent print "Content-type: text/html\n\n"; print " $confirm_message\n\n"; ####################################### sub encode_base64 { my $s = shift ; my $r = ''; while( $s =~ /(.{1,45})/gs ){ chop( $r .= substr(pack("u",$1),1) ); } my $pad=(3-length($s)%3)%3; $r =~ tr|` -_|AA-Za-z0-9+/|; $r=~s/.{$pad}$/"="x$pad/e if $pad; $r=~s/(.{1,72})/$1\n/g; $r; }