Tentando enviar vários anexos de texto via mensagem de correio

2

Execução deste script em: "Red Had Enterprise Linux Server versão 5.11 (Tikanga)"

O correio é: versão 8.1 6/6/93 (parece bastante antigo).

Já tentei várias coisas e parece que isso não funciona.

echo "Email message" | mail -a /home/user/checks/notprocessed.txt -a /home/user/checks/dirlist.txt -s "Subject" [email protected] /home/user/checks

Mensagem resultante:

mail: invalid option -- a

O mutt não está instalado e eu tenho acesso limitado a este sistema, pois ele é de propriedade da empresa para a qual trabalho. Eu poderia adicionar outros componentes, mas tem que passar pelo gerenciamento de mudanças e processos relacionados.

uuencode também não está disponível.

Aqui está o que estou usando hoje e estou tentando adicionar um segundo arquivo a:

if grep 'Not Empty' /home/user/checks/notprocessed.txt
   then
   echo "files were found";

   SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR";
   FROM="SENDER<[email protected]>"
   # EMAIL="JOHN DOE<[email protected]>"
   EMAIL="MARY DOE<[email protected]>";
   /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt /home/user/checks/dirlist.txt

   exit -20
fi

E .. /home/user/checks/dirlist.txt não está anexado ou incluído como parte do e-mail. Gostaria que o /home/user/checks/dirlist.txt fosse realmente um anexo

Isso realmente funciona - mas inclui o notprocessed.txt como o corpo do email.

if grep 'Not Empty' /home/user/checks/notprocessed.txt
   then
   echo "files were found";

   SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR";
   FROM="SENDER<[email protected]>"
   # EMAIL="JOHN DOE<[email protected]>"
   EMAIL="MARY DOE<[email protected]>";
   /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt

   exit -20
fi
    
por Leptonator 12.12.2015 / 19:00

1 resposta

4

Bem, o que acontece quando você faz um redirecionamento stdin (o < ) é que o primeiro arquivo - e somente o primeiro - é aberto e seu conteúdo é passado para o stdin de mail que o utiliza como corpo .

Como sua implementação mailx é antiga, ela não suporta o sinal -a da versão atual para criar anexos MIME. O que você pode fazer é criar o formato MIME, usando as coisas disponíveis.

Felizmente, não é difícil fazer usando um simples script bash (que eu tenho 100% de certeza que está disponível, mesmo no RHEL 5 :-)), algo tão simples como isso provavelmente faria:

#!/bin/bash
msgid="$RANDOM$RANDOM$RANDOM$RANDOM"
to="$1"
shift
subject="$1"
shift
echo "To: $to"
echo "From: [email protected]"
echo "Subject: $subject"
echo "Message-ID: $msgid"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=$msgid"
echo "" # header termination
while [ -n "$1" ]; do 
    echo "--$msgid"
    echo "Content-Type: text/plain; charset=UTF-8"
    echo "Content-Disposition: attachment; filename=\"$(basename $1)\""
    echo "Content-Transfer-Encoding: base64"
    echo ""
    base64 < "$1"
    shift
done

Você só precisa enviar o texto de e-mail resultante para sendmail para entrega, algo assim:

mail.sh "$SUBJECT" "$EMAIL" /home/user/checks/notprocessed.txt \
   /home/user/checks/dirlist.txt | sendmail -t

Este script usa o comando base64 para arquivos "blindados ASCII", para que você possa enviar arquivos binários e de texto, mas se você não estiver enviando arquivos de texto, provavelmente descobrirá como definir Content-type do anexo corretamente (ou apenas altere tudo para application/octet-stream , ie "binário"). Esse comando está disponível como parte do coreutils no RHEL 5, portanto, não espero que exista um problema em usá-lo.

Observe também o uso do -t flag para sendmail para que o MTA apenas leia o envelope de email do próprio email, portanto não há necessidade de colocar mais nada nos argumentos do comando sendmail . Apenas certifique-se de que o script inclua todos os campos necessários na saída - eu li o destinatário e o assunto da linha de comando como mailx , mas não é necessário e o endereço do remetente é codificado de qualquer maneira. / p>     

por 18.12.2015 / 12:49