Here is basically how you would encode it, although it may not be the best method of using sendmail. It shows how it is done manually, so you can appreciate how modules make it easier.
The second script, shows how MIME::Lite does it.
#!/usr/bin/perl
use strict;
use warnings;
use MIME::Base64;
my $SENDFILE = 'z.jpg';
my $FROMUSER = 'zentara';
my $FROMEMAIL = 'zentara@zentara.zentara.net';
my $TOUSER = 'zentara';
my $TOEMAIL = 'zentara@zentara.zentara.net';
open(F_MAIL,"|/usr/sbin/sendmail -t");
my $boundary = "----------90125";
print F_MAIL <<END_OF_MAIL;
Precedence: list
From: $FROMUSER <$FROMEMAIL>
To: $TOUSER <$TOEMAIL>
MIME-Version: 1.0
Subject: File attachment test
Content-Type: multipart/mixed;
boundary=\"$boundary\"
This is a multi-part message in MIME format.
--$boundary
Content-Type: text/plain;
charset=\"iso-8859-1\"
Here is the body of the message. A file attachment is also provided b
+elow.
--$boundary
Content-Type: application/octet-stream;
name=\"$SENDFILE\"
Content-Transfer-Encoding: Base64
Content-Disposition: attachment;
filename=\"$SENDFILE\"
END_OF_MAIL
#open(F_SEND,$SENDFILE) || &Error("Cannot open sendfile for MIME encod
+ing");
open(F_SEND,$SENDFILE) || die ("Cannot open sendfile for MIME encoding
+");
while (read(F_SEND,my $buf, 60 * 57 ) ) {
print F_MAIL encode_base64($buf);
}
close(F_SEND);
print F_MAIL <<END_OF_MAIL;
--$boundary--
END_OF_MAIL
close(F_MAIL);
__END__
#########################################
And here a module method.
#########################################
#!/usr/bin/perl
use warnings;
use strict;
use MIME::Lite;
$MIME::Lite::AUTO_CONTENT_TYPE="true";
my $msg = MIME::Lite->new(
From => 'zentara' ,
To => 'zentara@z.net' ,
Subject => 'test attach',
Type => 'multipart/mixed'
);
$msg->attach(
Path => './mailbody' ,
Filename => 'message.txt'
);
$msg->attach(
Path => "./logfile_07-24-2005.tar.gz" ,
Disposition => "attachment"
);
$msg->send;
print "Mission accomplished\n";
__END__
I'm not really a human, but I play one on earth.
flash japh
|