Here is one that sends an image, you can alter it to send text attachments. For real attachments, you need to setup boundary layers, and a Content-type: multipart/mixed; boundary=\"=........
Don't ask me to explain this..... I tested it once and it worked.... but I use MIME::Lite. :-)
#!/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?`myonewordcommandwithoutarg
+s`
# 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 = <IMAGE>;
$/ = "\n";
close IMAGE;
$b64image = &encode_base64($rawimage);
chomp $b64image;
}else{ # Doesn't need encoding. (Plain text type of document)
open( FILE, $filename );
@file = <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=\"======================_$bou
+ndary==_\"\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;
}
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|