Sendmails via Sendmail With Attachments
After Send mail via python it was time to try real sendmail. [ From the FAQ pages of sendmail ] How do I create attachments with sendmail? You don't. Sendmail is a mail transfer agent (MTA). Creating e-mail messages, including adding attachments or signatures, is the function of a mail user agent (MUA). Some popular MUAs include mutt, elm, exmh, Netscape, Eudora and Pine. Some specialized packages (metamail, some Perl modules, etc.) can also be used to create messages with attachments.
But yes there is always a way out! “sendmail” as an MTA, it just sees data.If, we want to make “/usr/sbin/sendmail”, as a MUA create a mail with attachments, the answer is no - use a MUA that can, or pre-build the mail and submit via sendmail -t
Hot Dope for simple text and html files can be seen below, the same can be used for others also by switching the content type as “Content-Type: MIMETYPE”
cat > mail << EOF
"From: $From
To: $TO
Subject: $SUBJECT
Mime-Version: 1.0
Content-Type: text/plain\n"
EOF
cat YOUR_FILE >> mail
/usr/lib/sendmail -t -oi < mail
A common perl hack, makes things more robust
#!/usr/local/bin/perl -w
use MIME::Lite;
$PLAINFILE="/tmp/text";
$BINFILE="/tmp/binary";
$SUBJECT="Attachmented";
$MAILTO="[email protected]";
#Meta Msg creation
$msg = new MIME::Lite
From => "$ENV{LOGNAME}",
To => "$MAILTO",
Subject => "$SUBJECT",
Type => 'multipart/mixed';
# Attach
attach $msg
Type => 'text/plain',
Path => "$PLAINFILE";
attach $msg
Type => 'application/octet-stream',
Encoding => 'base64',
Path => "/tmp/$BINFILE",
Filename => "$BINFILE";
# Send message to sendmail
open (SENDMAIL, "| /usr/lib/sendmail -t -oi");
$msg->print(\*SENDMAIL);
close(SENDMAIL);
About Hemanth HM
Hemanth HM is a Sr. Machine Learning Manager at PayPal, Google Developer Expert, TC39 delegate, FOSS advocate, and community leader with a passion for programming, AI, and open-source contributions.