shellunixsendmailkshuuencode

Using sendmail for HTML body and binary attachment


Objective: To send mail (using sendmail) with HTML body and binary attachment.

Followed the guidelines specified in the following links

http://www.unix.com/shell-programming-scripting/159522-sendmail-html-body-attachment-2.html

http://www.unix.com/shell-programming-scripting/58448-sendmail-attachment.html

It is working to the extent that, either HTML body or the binary attachment with uuencode, but not both.

Given below is a snippet of the shell script to sendmail. With this, the HTML body is coming fine, but the attachment is getting encoded/decoded wrongly and unable to view the same.

Please advise.

#!/usr/bin/ksh

export MAILFROM="noreply@site.dom"
export MAILTO="somebody@somesite.com"
export SUBJECT="Test PDF for Email"
export BODY="email_body.htm"
export ATTACH="file.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
(
 echo "From: $MAILFROM"
 echo "To: $MAILTO"
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo "Content-Type: multipart/mixed; boundary=\"-$MAILPART\""
 echo "---$MAILPART"
 echo "Content-Type: text/html"
 echo "Content-Disposition: inline"
 cat $BODY
 echo "---$MAILPART"
 echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
 echo "Content-Transfer-Encoding: base64"
 echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
 uuencode -m $ATTACH $(basename $ATTACH)
 echo "---$MAILPART--"
) | /usr/sbin/sendmail $MAILTO

I am using HP-UX ia64. Have searched through the forum and web and found references mostly to PHP, Python, etc.


Solution

  • Changing the Content transfer encoding type within the email from base64 to uuencode resolved the issue. Thanks for the inputs so far.

    Given below is the revised script that works.

    #!/usr/bin/ksh
    
    export MAILFROM="noreply@domain.com"
    export MAILTO="mail.to@gmail.com"
    export SUBJECT="Test PDF for Email"
    export BODY="email_body.htm"
    export ATTACH="file.pdf"
    export MAILPART=`uuidgen` ## Generates Unique ID
    export MAILPART_BODY=`uuidgen` ## Generates Unique ID
    
    (
     echo "From: $MAILFROM"
     echo "To: $MAILTO"
     echo "Subject: $SUBJECT"
     echo "MIME-Version: 1.0"
     echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
     echo ""
     echo "--$MAILPART"
     echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
     echo ""
     echo "--$MAILPART_BODY"
     echo "Content-Type: text/plain; charset=ISO-8859-1"
     echo "You need to enable HTML option for email"
     echo "--$MAILPART_BODY"
     echo "Content-Type: text/html; charset=ISO-8859-1"
     echo "Content-Disposition: inline"
     cat $BODY
     echo "--$MAILPART_BODY--"
    
     echo "--$MAILPART"
     echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
     echo "Content-Transfer-Encoding: uuencode"
     echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
     echo ""
     #uuencode -m $ATTACH $(basename $ATTACH)
     uuencode $ATTACH $(basename $ATTACH)
     echo "--$MAILPART--"
    ) > email_`date '+%Y%m%d_%H%M%S'`.out
    | /usr/sbin/sendmail $MAILTO