Changed to use a chunk/buffer that is a multiple of 57 bytes, corrected 'appliaction/pdf' and added some extra line endings. Much better to use a module if you can.
#!perl
use strict;
use Net::SMTP;
use MIME::Base64;
my $smtphost = '';
my $username = '';
my $password = '';
my $emailto = '';
my $emailfrom = '';
my $subject = 'Hello world';
my $message = 'Test message';
my $smtp = Net::SMTP->new($smtphost, Debug => 1, Timeout => 5);
$smtp->datasend("AUTH LOGIN\n");
$smtp->datasend(encode_base64($username));
$smtp->datasend(encode_base64($password));
#$smtp->auth($username,$password);
$smtp->mail($emailfrom);
$smtp->to($emailto);
$smtp->data();
my $now = date_r();
$smtp->datasend("To: $emailto\n");
$smtp->datasend("From: $emailfrom\n");
$smtp->datasend("Date: $now\n");
$smtp->datasend("Subject: $subject\n");
my $boundary = 'frontier';
my $attachBinaryFile = '18560243.pdf';
$smtp->datasend("MIME-Version: 1.0\n");
#$smtp->datasend("Content-type: multipart/mixed;\n\tboundary=\"$bounda
+ry\"\n");
$smtp->datasend("Content-type: multipart/mixed; boundary=\"$boundary\"
+\n\n");
$smtp->datasend("--$boundary\n");
$smtp->datasend("Content-type: text/plain;\n");
$smtp->datasend("\nSome plain text here in the body of the email\n");
$smtp->datasend("\n");
$smtp->datasend("--$boundary\n");
#$smtp->datasend("Content-Type: appliaction/pdf; name=\"$attachBinaryF
+ile\"\n");
$smtp->datasend("Content-Type: application/pdf; name=\"$attachBinaryFi
+le\"\n");
$smtp->datasend("Content-Transfer-Encoding: base64\n");
$smtp->datasend("Content-Disposition: attachment; filename=\"$attachBi
+naryFile\"\n");
$smtp->datasend("\n");
my $buf;
#open(DAT, "/path/$attachBinaryFile") || die("Could not open binary fi
+le!");
open DAT, '<',"/path/$attachBinaryFile" or die "Could not open $attach
+BinaryFile : $!";
binmode(DAT);
local $/=undef;
# while (read(DAT, my $picture, 4096)) {
while (read(DAT, my $picture, 4104)) {
$buf = &encode_base64( $picture );
$smtp->datasend($buf);
}
close(DAT);
$smtp->datasend("\n");
$smtp->datasend("--$boundary\n");
$smtp->dataend();
$smtp->quit;
sub date_r {
# my ($monthday, $mon, $yr, $ time, $hour, $str);
# my (@lt) = ();
# $monthday = $lt[3];
# $mon = $lt[4]+1;
# $yr = $lt[5] + 1900;
# $hour = $lt[2];
my @lt = localtime();
$lt[4] += 1;
$lt[5] += 1900;
my $str = sprintf "%02d/%02d/%04d %02d:%02d:%02d",@lt[4,3,5,2,1,0];
return $str;
}
poj |