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

6 comments
Join the conversationMaiara - 27/03/2011
Gostei disso
Carlos Fagiani Junior - 13/04/2012
Não funcionou… Tem que configurar o comando “mail” antes??
Daniel Kühl Lima - 13/04/2012
Isso mesmo, tem que instalar o programa.
Geralmente o nome do pacote é mailx.
Abraço
Carlos Fagiani Junior - 13/04/2012
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” [email protected]
.
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” [email protected] < 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
Veja se retorna erro no /var/log/messages e /var/log/maillog:
tail -f /var/log/messages
tail -f /var/log/maillog