Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re^3: Using Net::SMTP to send pdf attachment

by thanos1983 (Parson)
on Mar 16, 2018 at 14:21 UTC ( #1211041=note: print w/replies, xml ) Need Help??


in reply to Re^2: Using Net::SMTP to send pdf attachment
in thread Using Net::SMTP to send pdf attachment

Hello again Anonymous Monk,

You need to treat the pdf as binary file. For the moment I do not have the time to play with your script to modify it but here is a sample of code that I just tested and works with pdf attachment using MIME::Lite.

#!/usr/bin/perl use strict; use warnings; use MIME::Lite; use Getopt::Std; my $SMTP_SERVER = '127.0.0.1'; # CHANGE ME my $DEFAULT_SENDER = 'sender@example.com'; # CHANGE ME my $DEFAULT_RECIPIENT = 'recipient@example.com';# CHANGE ME MIME::Lite->send('smtp', $SMTP_SERVER, Timeout=>60); my (%o, $msg); # process options getopts('hf:t:s:', \%o); $o{f} ||= $DEFAULT_SENDER; $o{t} ||= $DEFAULT_RECIPIENT; $o{s} ||= 'Your binary file, sir'; if ($o{h} or !@ARGV) { die "usage:\n\t$0 [-h] [-f from] [-t to] [-s subject] file ...\n"; } # construct and send email $msg = new MIME::Lite( From => $o{f}, To => $o{t}, Subject => $o{s}, Data => "Hi", Type => "multipart/mixed", ); while (@ARGV) { $msg->attach('Type' => 'application/octet-stream', 'Encoding' => 'base64', 'Path' => shift @ARGV); } $msg->send( ); __END__ $ perl client.pl Documentation.pdf

Hope this helps, BR.

Seeking for Perl wisdom...on the process of learning...not there...yet!

Replies are listed 'Best First'.
Re^4: Using Net::SMTP to send pdf attachment
by Anonymous Monk on Mar 18, 2018 at 05:52 UTC

    Thank you so much thanos1983 :)

    Have gotten the attach part to work with Sendmail, which is the default mail my web site is using. Have also tried Mail::Sender, which works too.

    Will keep yours view for now.

Re^4: Using Net::SMTP to send pdf attachment
by Anonymous Monk on Mar 16, 2018 at 15:31 UTC

    Thanks for confirming that the pdf is a binary file.

    I tried with the code below (by astrobal from http://www.perlmonks.org/?node_id=1189197) but the pdf file opens with nothing:

    $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"); open(DAT, "$path/$attachBinaryFile") || die("Could not open binary fil +e!"); binmode(DAT); local $/=undef; while (read(DAT, $picture, 4096)) { $buf = &encode_base64( $picture ); $smtp->datasend($buf); } close(DAT); $smtp->datasend("\n"); $smtp->datasend("--$boundary\n");

    I changed "Content-Type: image/jpeg;" in his code to "Content-Type: application/pdf;".

      Can you post the complete script please.

      poj

        Hi poj thanks. Here's the complete code:

        use strict; use Net::SMTP; use MIME::Base64; my $smtphost = 'some_smtp_host'; my $username = 'username'; my $password = 'password'; my $emailto = 'to@hello.com'; my $emailfrom = 'from@hello.com'; 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->mail($emailfrom); $smtp->to($emailto); $smtp->data(); my $boundary = 'frontier'; my $attachBinaryFile = '18560243.pdf'; $smtp->datasend("MIME-Version: 1.0\n"); $smtp->datasend("Content-type: multipart/mixed;\n\tboundary=\"$boundar +y\"\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=\"$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/18560243.pdf") || die("Could not open binary file!"); binmode(DAT); local $/=undef; while (read(DAT, my $picture, 4096)) { $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) = (); @lt = localtime(); $monthday = $lt[3]; $mon = $lt[4]+1; $yr = $lt[5] + 1900; $hour = $lt[2]; $time = sprintf("%02d:%02d:%02d", $hour, $lt[1], $lt[0]); $str = $mon . '/' .$monthday . '/' . $yr . ' ' . $time; return $str; }

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1211041]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (3)
As of 2020-11-27 21:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?