Enviado email com anexo via linha de comando

As vezes é necessário enviar um email no Linux, FreeBSD ou Unices via linha de comando com um anexo.

Alternativa para esse método usando o programa mutt.

Esse procedimento também pode ser utilizado como parte de um Shell script que envia relatórios anexados para o email do administrador.

Corpo da mensagem

Como exemplo, o corpo da mensagem tem o seguinte conteúdo:

Arquivo: corpo.txt

Arquivo gerado para fins de teste.
Linha 2
Linha 3

Conteúdo do anexo

Já o relatório, ou o conteúdo do anexo propriamente dito, contém o seguinte dado:

Arquivo: relatorio.txt

ftpusers		nscd.conf		services
gettytab		nsmb.conf		shells
gnats			nsswitch.conf		skel
group			ntp			snmpd.config
gss			opieaccess		spwd.db
host.conf		opiekeys		ssh
hostid			pam.d			ssl
hosts			passwd			sysctl.conf
hosts.allow		pccard_ether		syslog.conf
hosts.equiv		periodic		termcap

Para gerar o conteúdo do email codificado que será enviado ao administrador, executar o comando que tonará isso válido

uuencode relatorio.txt relatorio_anexo.txt > anexo.txt

Instalando o utilitário uuencode

Caso você não possua o comando uuenconde, para instalar, basta via yum solicitar sua instalação:

yum install sharutils

E assim você terá o utilitário uuencode instalado em /usr/bin/uuencode

Preparando o email

Com o corpo do email e o anexo definidos o próximo passo é concatenar seu conteúdo e torná-los um só arquivo:

cat corpo.txt anexo.txt > mensagem.txt

O conteúdo final do arquivo gerado deve parecer com o seguinte:

Arquivo: mensagem.txt

Arquivo gerado para fins de teste.
Linha 2
Linha 3

begin 666 relatorio_anexo.txt
M4F5P;W)T($QI;F4Q(%1H:7,@:7,@=&AE($%T=&%C:&5D(%)E< &]R=`I297!O
6<G0@3&EN93(*4F5P;W)T($QI;F4S"FAE
`
end

Enviando o email com o anexo

mail -s "Envio do relatorio" < mensagem.txt

Mutt

Mutt é um cliente de email de interface texto.

Para instalar no CentOS ou Red Hat ou Fedora:

yum install mutt

E o envio:

echo "Este eh o conteudo do email." | mutt -a "/caminho/do/arquivo.tar.gz" -s "Assunto 1 2 3" --

Troubleshoot

Se ao enviar o email ele não chega, verique por erros os logs:

/var/log/maillog
/var/log/messages

tail -n 100 -f /var/log/maillog
tail -n 100 -f /var/log/messages
Share this post

6 comments

Join the conversation
  • Maiara - 27/03/2011 reply

    Gostei disso

  • Carlos Fagiani Junior - 13/04/2012 reply

    Não funcionou… Tem que configurar o comando “mail” antes??

    Daniel Kühl Lima - 13/04/2012 reply

    Isso mesmo, tem que instalar o programa.

    Geralmente o nome do pacote é mailx.

    Abraço

    Carlos Fagiani Junior - 13/04/2012 reply

    O programa eu tenho, já vem instalado na minha distro (slackware).

    Não precisa configurar um SMTP ou algo parecido?

    quando eu faço o comando mais simples:

    #########
    $ mail -s “teste” fagianijunior@gmail.com
    .
    EOT
    $
    #########

    Finalizo o texto com . e mandei o comando CTRL+D
    Só que não acontece nada a mais do que esse EOT.

    Com o comando para anexo:

    ########
    $ mail -s “test” fagianijunior@gmail.com < email.txt
    ########

    Não retorna erro e nem informação alguma e o e-mail não chega.

    Por isso que perguntei se precisa configurar algum arquivo referente ao comando "mail".

    Daniel Kühl Lima - 13/04/2012

    Ah, sim.

    Você precisa configurar o seu sendmail ou postfix pra fazer relay em um servidor SMTP somente assim irá funcionar essa e qualquer outra solução para envio de email com anexo.

    Pra configurar sendmail:
    http://j.mp/ITwnId

    Pra configurar postfix
    http://j.mp/ITwJ1u

    Abraço

    Daniel K Lima - 26/05/2014 reply

    Veja se retorna erro no /var/log/messages e /var/log/maillog:
    tail -f /var/log/messages
    tail -f /var/log/maillog

Leave a Reply Cancel