Embedding an image in an email using linux commands

前端 未结 6 680
醉话见心
醉话见心 2021-01-02 06:33

Is there a way to embed images into the body of an email using linux commands like mutt or sendmail?

I used this

mutt -e \         


        
6条回答
  •  醉话见心
    2021-01-02 07:07

    Here is an improved version of the Joce's script.

    This one does not require a custom sendmail command, because it creates one on the fly, uses it and deletes it afterwards.

    It is parametric, so you don't need to change its code for different recipients and the like, and it offers a few other goodies.

    The first few lines of code should be clear enough to explain the five positional parameters meaning, but here is an example, just in case:

     /srv/emailbody.html "Sender's Name" sender@example.com "Embedded images" 'Recipent's name ' 
    

    It depends on mktemp (the original script did not), because I like that more than using $$, but that's only a matter of taste.

    #!/bin/bash
    
    HTMLFULLPATH="$1"
    SENDER="$2"
    SENDEREMAIL="$3"
    SUBJECT="$4"
    RECIPIENT="$5"
    
    HTML=$(basename "${HTMLFULLPATH}")
    SENDERDOMAIN=$(echo "${SENDEREMAIL}" | cut -d@ -f2)
    
    if ! [[ "${RECIPIENT}" == '*<*' ]] ; then
      RECIPIENT="${RECIPIENT}"'<'"${RECIPIENT}"'>' # TO_NO_BRKTS_* SpamAssassin rules
    fi
    
    function atexit
    {
      rm -rf "${TEMPDIR}" "${NEOMUTTCONFIG}" >/dev/null 2>&1
    }
    
    trap atexit INT TERM EXIT
    
    TEMPDIR=$(mktemp -d)
    mkdir -p "${TEMPDIR}/img"
    grep "src=" "${HTMLFULLPATH}" | sed -e "s,.*src=\"\([^\"]*/\)*\([^\"/]*\)\".*,wget \1\2 -O ${TEMPDIR}/img/\2," > "${TEMPDIR}/getimg.sh"
    bash "${TEMPDIR}/getimg.sh" >/dev/null 2>&1
    sed -e 's,src="\([^"]*/\)*\([^"/]*\)",src="cid:\2@'${SENDERDOMAIN}'",g' < "${HTMLFULLPATH}" > "${TEMPDIR}/${HTML}"
    SENDMAIL="${TEMPDIR}/sendmail.sh"
    
    cat > "${SENDMAIL}" << EOF
    #!/bin/bash
    sed -e 's,Content-Disposition: attachment; filename="\([^"]*\)",Content-Disposition: inline; name="\1"\nContent-ID: <\1@'${SENDERDOMAIN}'>,' < /dev/stdin | sed -e 's,Content-Type: multipart/mixed;,Content-Type: multipart/related;,' | sendmail \$*
    EOF
    
    chmod a+rx "${SENDMAIL}"
    
    NEOMUTTCONFIG=$(mktemp)
    
    echo 'set from="'"${SENDER}"' <'"${SENDEREMAIL}"'>"' >> "${NEOMUTTCONFIG}"
    echo 'set smtp_url=""' >> "${NEOMUTTCONFIG}"
    echo 'set sendmail="'${SENDMAIL}'"' >> "${NEOMUTTCONFIG}"
    echo "set content_type=text/html" >> "${NEOMUTTCONFIG}"
    
    neomutt -F "${NEOMUTTCONFIG}" "${RECIPIENT}" -s "${SUBJECT}" -a "${TEMPDIR}/img/"* < "${TEMPDIR}/${HTML}"
    

提交回复
热议问题