Como adicionar um anexo a um email em HTML no UNIX?

0

Eu tenho que enviar um arquivo HTML por e-mail no corpo de um e-mail de uma máquina UNIX. Vamos chamar o arquivo HTML como hello.html

Estou usando o seguinte código em bash script ,

(
echo "To: [email protected]" 
echo "Subject: Report" 
echo "Content-Type: text/html" 
echo
cat hello.html
echo 
) | /usr/sbin/sendmail -t

O código acima funciona perfeitamente para mim. Agora eu também quero anexar um arquivo zip a este e-mail. Existe alguma maneira de fazer isso?

Estou limitado a usar apenas mail , mailx e /usr/sbin/sendmail .

    
por Kemat Rochi 27.08.2017 / 04:35

2 respostas

3

Sugiro que você envie um e-mail real com um anexo de arquivo zip e examine o conteúdo bruto.

O que você descobrirá é que o e-mail será formatado de acordo com o padrão MIME que especifica como incluir vários arquivos formatos em um email textual.

No seu caso, o tipo de conteúdo de alto nível será algo como multipart / alternative ou multipart / mixed . Dentro disso haverá duas ou mais partes ou seções com seu próprio tipo de conteúdo . Um terá o tipo application / zip . A seção application / zip terá uma codificação de texto (por exemplo, Base 64) do arquivo zip.

Aqui está uma amostra:

From: John Doe <[email protected]>
MIME-Version: 1.0
Content-Type: multipart/mixed;
        boundary="XXXXboundary text"

This is a multipart message in MIME format.

--XXXXboundary text 
Content-Type: text/plain

this is the body text


--XXXXboundary text 
Content-Type: text/html

<html>
  ...Body of email in HTML format...
</html>

--XXXXboundary text 
Content-Type: application/zip;
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
        filename="test.zip"

BASE64 ENCODING TEXT HERE

--XXXXboundary text--

Mais algumas informações: Email Anexos de arquivo usando o MIME

Voltar para a raiz da sua pergunta, como fazer isso? Eu não estou familiarizado com nenhuma ferramenta independente que ajude a construir um email como este, mas eu ficaria surpreso se você não pudesse encontrar algo útil. Talvez um dos clientes de email suporte operações de linha de comando / em massa. Mas, se o pior acontecer, é tudo apenas texto ASCII, para que você possa construí-lo manualmente de acordo com o que está fazendo com seu e-mail HTML. Mas eu sugiro que você construa a mensagem em um arquivo temporário antes de enviá-lo ao seu agente de email. (Olhe para "aqui documentos" para facilitar a gravação de grandes quantidades de texto.)

E, como indicado, você precisará converter seu arquivo zip para o Base 64. Quase toda instalação Linux deve ter o utilitário base64 ou equivalente. Basta passar o seu zip para ele e anexar ao seu arquivo de e-mail no momento adequado ...

base64 test.zip >> my-email-file.txt
    
por 27.08.2017 / 06:25
0

#!/usr/bin/ksh
export MAILTO="email_address"
export CONTENT="/export/home/aisdba/email_body.html" e export SUBJECT="subject of email"
( e echo "Subject: $SUBJECT" e echo "MIME-Version: 1.0" e echo "Content-Type: text/html"
echo "Content-Disposition: inline" e cat $CONTENT e ) | /usr/sbin/sendmail $MAILTO

(ou) como um email in-line que você pode enviar.

cat <<'EOF' - CH_ARG.html | /usr/sbin/sendmail $TARGET_DL em Subject: your subject line em Content-Type: text/html em MIME-Version: 1.0 em Content-Disposition: inline em EOF

(ou) tente abaixo para anexo

cat <<'EOF' - CH_ARG.html | /usr/sbin/sendmail $TARGET_DL em Subject: Your subject line em Content-Type: text/text em MIME-Version: 1.0 em Content-Disposition: attachment em EOF

    
por 07.01.2018 / 19:37