Pular para o conteúdo
, , ,

Enviado email com anexo via linha de comando

Avatar de DK
DKTrabalha com Linux e Unix a mais de 23 anos e possui as certificações LPI 3, RHCE, AIX e VIO.

30 ago, 2009
2 min de leitura

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" [email protected] < 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" -- [email protected]

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
Avatar de DK

Comentários

Comentários fechados para visitantes. Entre ou registre-se para comentar.

6 respostas para “Enviado email com anexo via linha de comando”

  1. Avatar de Carlos Fagiani Junior
    Carlos Fagiani Junior

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

    1. Avatar de DK

      Isso mesmo, tem que instalar o programa.

      Geralmente o nome do pacote é mailx.

      Abraço

      1. Avatar de Carlos Fagiani Junior
        Carlos Fagiani Junior

        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".

        1. Avatar de DK

          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

    2. Avatar de DK

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

Ir para