Как отправить электронное письмо с несколькими текстовыми вложениями с помощью sendmail - PullRequest
8 голосов
/ 22 марта 2011

Я хочу отправить файл HTML в качестве тела сообщения и хочу прикрепить несколько текстовых файлов к этому сообщению электронной почты.

Поскольку HTML-файл должен быть отправлен, необходимо использовать sendmail (я не мог сделать это с помощью mailx).

Как вы отправляете электронную почту в формате HTML и текстовые вложения с помощью sendmail?

Ответы [ 3 ]

9 голосов
/ 22 марта 2011

Предполагая, что в вашей системе есть uunecode, вы можете отправить электронное письмо с несколькими прикрепленными файлами, например так:

#!/bin/bash

...
...
...
BOUNDARY="=== This is the boundary between parts of the message. ==="

{
   echo  "From: $MAILFROM"
   echo  "To: $MAILTO"
   echo  "Subject:" $SUBJECT
   echo  "MIME-Version: 1.0"
   echo  "Content-Type: MULTIPART/MIXED; "
   echo  "    BOUNDARY="\"$BOUNDARY\"
   echo
   echo  "        This message is in MIME format.  But if you can see this,"
   echo  "        you aren't using a MIME aware mail program.  You shouldn't "
   echo  "        have too many problems because this message is entirely in"
   echo  "        ASCII and is designed to be somewhat readable with old "
   echo  "        mail software."
   echo
   echo  "--${BOUNDARY}"
   echo  "Content-Type: TEXT/PLAIN; charset=US-ASCII"
   echo
   echo  "This email comes with multiple attachments."
   echo
   echo
   echo  "--${BOUNDARY}"
   echo  "Content-Type: application/zip; charset=US-ASCII; name="${ZIPFILE}
   echo  "Content-Disposition: attachment;   filename="`basename ${ZIPFILE}`
   echo
   uuencode $ZIPFILE $ZIPFILE
   echo
   echo  "--${BOUNDARY}--"
   echo  "Content-Type: application/pdf; charset=US-ASCII; name="${PDFFILE}
   echo  "Content-Disposition: attachment;   filename="`basename ${PDFFILE}`
   echo  
   uuencode $PDFFILE $PDFFILE
   echo
   echo  "--${BOUNDARY}--"
} | /usr/lib/sendmail -t
0 голосов
/ 15 июля 2016

Вот скрипт bash, который я использую для отправки отчетов, которые я генерирую людям. Они отправляются в виде вложений. Поместите ваш HTML в переменную "body" скрипта. Я оставлю параметризацию переменных на ваше усмотрение.

#!/bin/bash

function get_mimetype(){
file --mime-type "$1" | sed 's/.*: //'
}

from="me.last@company.com"
to="some.one@companyBlah.com"
subject="Your Report my Lord"
boundary="=== Boundary ==="
body="The reports are attached to this email"
declare -a attachments
attachments=( "fileOne.out" "fileTwo.out" "fileThree.out" "file-et-cetera.out")

# Build headers
{

printf '%s\n' "From: $from
To: $to
Subject: $subject
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary=\"$boundary\"

--${boundary}
Content-Type: text/plain; charset=\"US-ASCII\"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

$body
"

for file in "${attachments[@]}"; do

      [ ! -f "$file" ] && echo "Attachment $file not found, omitting file" >&2 && continue

        mimetype=$(get_mimetype "$file")

  printf '%s\n' "--${boundary}
Content-Type: $mimetype
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"$file\"
  "

  base64 "$file"
  echo
done

# print last boundary with closing --
printf '%s\n' "--${boundary}--"

} | sendmail -t -oi
0 голосов
/ 22 марта 2011

Не думаю, что sendmail поможет вам в этом. Перейти к клиенту, как mutt, и, например, сделать. mutt -a file1 -a file2 -- recipient@do.main. Или перейдите на perl.

...