Enviar e-mail pelo terminal com mutt

Neste artigo pretendo cobrir uma forma simples e rápida de usar o mutt para enviar e-mails pelo terminal, usando uma conta do GMail.

[ Hits: 33.762 ]

Por: Raimundo Alves Portela em 25/11/2011 | Blog: http://portela.tendalinux.com


Instalando, Configurando e Enviando e-mail

Vi algumas pessoas precisando desse tipo de recurso, usei no início do ano e até tinha me esquecido como ;-), resolvi resgatar alguns arquivos de configuração que tenho e voltei a brincar com isso; e acho que vou usá-lo mais daqui pra frente.

A ferramenta usada para fazer o envio de e-mails, é o mutt :

"Mutt é um software de baseado em texto (para terminais) pequeno, mas muito poderoso para a leitura e envio de e-mails em sistemas operacionais UNIX, incluindo suporte para cores em terminais, MIME, OpenPGP, e um modo de classificação threaded."

(Tradução livre de parte do man mutt, apoiada pelo http://translate.google.com.br)

Bom como você pode ver o mutt serve tanto para ler (receber) como para enviar e-mail, nesse artigo vou apenas cobrir uma forma rápida de configurá-lo para enviar, e posto algumas dicas para automatizar o envio da mesma mensagem para diversos destinatários.

Instalando o mutt

Testando no Ubuntu 11.10 e Debian 6.

Como já faz parte dos repositórios padrões, para instalar, basta usar o comando:

$ sudo apt-get install mutt

Após o download e instalação automática pelo apt-get, no Debian passe para a configuração, no Ubuntu alguns telas de configurações serão mostradas:
Linux: Enviar e-mail pelo terminal com mutt

Essa tela avisa sobre as configurações de servidor de e-mail disponível, apenas dê um ENTER, já a próxima tela:
Linux: Enviar e-mail pelo terminal com mutt

Pede para você escolher a configuração de servidor de e-mail que melhor atende as suas necessidades, como nossa necessidade no momento é só enviar e-mail, escolhe a primeira opção 'No configuration' e dê ENTER.

Configurando o arquivo .muttrc

Agora vamos configurar o arquivo de usuário que o mutt irá usar para coletar as informações para envio de e-mail.

Esse arquivo não existe por padrão, então iremos criá-lo, dentro do diretório do usuário desejado:

$ nano ~/.muttrc

# Nome do Remetente
set realname="Raimundo Portela"

# Email do Remetente
set from="rai3mb@gmail.com;"

# Usuario da conta de email
set my_user=rai3mb@gmail.com

# Senha da conta de email
set my_pass='SENHA_FACIL'

# Autenticacao no servidor smtp de email, nesse caso do gmail.com
set smtp_url=smtps://$my_user:$my_pass@smtp.gmail.com

# Camada de segurança, requerida pelo gmail.com
set ssl_force_tls = yes

Usei o editor nano, você pode usar qualquer um, basta colocar o conteúdo indicado fazendo as adaptações e salve dentro do seu diretório de usuário com o nome '.muttrc' (observe o ponto no inicio do nome) , deixei-o comentado para facilitar.

Enviando o e-mail

Bom, agora começa brincadeira, basta abrir um terminal e passar alguns parâmetros básicos para o mutt, eu uso a seguinte sintaxe:

$ echo 'conteúdo do e-mail' | mutt -s 'assunto do e-mail' email_destino@dominio.com

Exemplo:

$ echo "Ao rai3mb,
Testando envio de email com mutt
Att,
tu mesmo" | mutt -s "assunto teste" rai3mb@gmail.com


Linux: Enviar e-mail pelo terminal com mutt

Email com arquivo anexo

Para enviar um ou vários arquivos em anexo ao e-mail, basta informar o parâmetro '-a' seguindo do nome dos arquivos:

$ echo 'Este é um email teste enviado para mim mesmo ;-)' | mutt -s 'teste para VOL' -a pgadmin.log log-7z.txt -- rai3mb@gmail.com

Obs.: Observe que após o nome do último arquivo a anexar deve-se colocar '--' (dois traços) para depois informar o(s) destinatário(s).
Linux: Enviar e-mail pelo terminal com mutt

    Próxima página

Páginas do artigo
   1. Instalando, Configurando e Enviando e-mail
   2. Dicas extras
Outros artigos deste autor

Aplicativos para gerenciar a Área de Transferência (Clipboard)

Explorando a entrada de dados com READ em Bash Shell

Otimizando o uso do seu disco rígido usando a mesma /home para várias distribuições

StarDict - software de tradução de ótima qualidade!

Consultas SQL pelo Terminal no Postgres, Mysql, SQL Server, etc

Leitura recomendada

Discar BrasilTelecom com PPPOE no Ubuntu 6.10

Recursos avançados do bash que você não aprende na escola

Como matar um processo - kill, killall, pkill e xkill

Pipelines (Canalizadores)

Algoritmos em Shell Script

Comentários
[1] Comentário enviado por lemuelroberto em 25/11/2011 - 08:24h

Muito obrigado.

Muito bom poder enviar um email de forma tão fácil pelo terminal, e de forma automática.


[2] Comentário enviado por ribafs em 25/11/2011 - 08:52h

Caro Portela, uma beleza sua dica.
Testei aqui num Mint e funcionou beleza.
Isso é realmente trabalhoso de achar.
Quando trabalhamos em servidores sem ambiente gráfico fica muito útil.
Valeu camarada, muito grato pela dica!

[3] Comentário enviado por hellnux em 25/11/2011 - 10:20h

Bela contribuição,

Já utilizo o mutt em alguns scripts. Fiquei curioso com o código "while read LINHA" e decidi testa-lo aqui no Ubuntu, a priori não funcionou. Só funcionou quando deixei uma linha em branco no final do arquivo dos destinatarios, acredito que o correto seja assim. A versão do meu bash é 4.1.


[4] Comentário enviado por izaias em 25/11/2011 - 12:03h

Não falei, Rai.

É um excelente trabalho!
Parabéns pinguim!

[5] Comentário enviado por rai3mb em 25/11/2011 - 18:56h

Valeu pessoal, que bom que esteja sendo útil.

@hellnux
O meu bash GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
Tá funcionando normalmente, sem colocar a linha em branco no final, achei estranho o erro pra vc, pra mim sempre funcionou ;-)

Pode ser a formatação de alguma coisa que determina o fim do arquivo ;-), meu $LANG_C = en_US.utf8

Mas o importante mesmo é que funcionou ;-)


[6] Comentário enviado por rodrigo.a.sc em 26/11/2011 - 10:33h

No Caso ele seria um client que se logaria na sua conta no GMAIL e de lá enviaria um e-mail, certo ?!

[7] Comentário enviado por sansimon em 26/11/2011 - 12:55h

Vale lembrar que no arquivo .muttrc a senha fica em modo texto legível , então é seguro depois que enviar remover a senha do .muttrc.
Valeu pela post, muito útil.

saudações a todos.

[8] Comentário enviado por rai3mb em 26/11/2011 - 22:04h

@rodrigo.a.sc

Sim, assim como outros programas cliente Thunderbird e Evolution, eles precisam de um servidor configurado para o envio do e-mail, nesse caso demonstrei usando o smtp (servidor de envio) do GMail, mas pode ser outro basta trocar o servidor de autenticação, usuário e senha ;-)

Abraços

[9] Comentário enviado por rai3mb em 26/11/2011 - 22:10h

@sansimon

Isso mesmo a senha fica legível, no caso se alguém não quiser colocar a senha no arquivo por achar que pode ser uma brecha de segurança do seu ambiente, pode não deixar a senha no arquivo, deixando as outras configurações, e fazer o seguinte:

Antes de enviar um e-mail no terminal, digite:

export my_pass='coloque_sua_senha'
echo 'conteúdo do email' | mutt -s 'assunto' e-mail_destino@dominio.com

Prontinho, vai funcionar do mesmo jeito e a senha fica na variável my_pass em memória podendo ser apagada logo em seguida, com:

my_pass='' ou unset my_pass

Abraços



[10] Comentário enviado por chimico em 27/11/2011 - 13:54h

@rai3mb

parabéns quase chará, eu também estava procurando algo sobre o mutt, eu ia até perguntar sobre comom utilizar duas contas de email, mas vejo que dá para usar um shell script para cada uma. Quanto a segurança da senha creio que compilar o script deve resolver, ao invés de usar a senhar como variável de ambiente (http://www.vivaolinux.com.br/dica/Compilar-shell-script).

[11] Comentário enviado por rai3mb em 27/11/2011 - 21:22h

@chímico

beleza, usar como variável de ambiente é mais seguro que compilar ;-), pois vc usa e logo em seguida apaga, compilando tem engenharia reversa, mas essa questão de segurança é para casos extremos mesmo, para o caso de alguém acessar seu micro e ficar fuçando arquivos como esse, nesse caso usando como variável e logo em seguida apagando não há problema.

Abraços

[12] Comentário enviado por duke_nukem em 28/11/2011 - 03:19h

Bem legal, mas no meu aparece " alerme de tempo"

[13] Comentário enviado por rai3mb em 28/11/2011 - 10:00h

@duke_nukem em que momento aparece essa mensagem?
é "alarme de tempo" ?? revise as configurações, está demorando para finalizar o comando? o problema pode ser outro...

[14] Comentário enviado por junior em 28/11/2011 - 18:00h

Muito bom Raimundo!

Eu estava utilizando o sendEmail para enviar e-mails via PHP, mas vou pensar no mutt.
Hehe.

Um abraço.

[15] Comentário enviado por hellnux em 29/11/2011 - 11:33h

@rai3mb

Desculpe a demora, pois a VM (Ubuntu 10.10) fica no meu trampo. Segue:

LANG=pt_BR.utf8

Estranho mesmo. Ninguém além de mim comentou sobre, então devo ser o único. ^^

[16] Comentário enviado por horion em 13/05/2012 - 12:48h

Tem como usar o mutt com o logwatch para envio de e-mail, grande abraço

[17] Comentário enviado por rai3mb em 16/05/2012 - 12:31h

Não conheço a ferramenta, mas se ela colocar sua saída em um arquivo ou na saída padrão, tem como sim, bastaria algo como

logwatch | mutt -s 'assunto' destinatario

ou

cat arquivo_de_saida | mutt -s 'assunto' destinatario

[18] Comentário enviado por removido em 02/06/2012 - 18:20h

olá pra todos, hoje é meu primeiro dia.

sou novo no linux e estou apanhando a varios dias pra fazer meu servidor debian enviar mail. configurei o ssmtp e funciona mais como ele é muito limitado resolvi seguir este artigo e configurar o mutt só que ao enviar não dar menssagem de erro nem o e-mail chega. Alguem pode me ajudar?

é bem provavel que o erro seja no smtp que no ssmtp eu tive que configurar mailhub=smtp.supercabo.com.br:465 mais no mutt nao sei onde configurar.

desde já muito obrigado

[19] Comentário enviado por removido em 02/06/2012 - 18:27h

é bem provavel que o erro seja no smtp que no ssmtp eu tive que configurar mailhub=smtp.supercabo.com.br:465 mais no mutt nao sei onde configurar.

[20] Comentário enviado por ivomar em 04/06/2012 - 08:55h

Olá pra todos,

Fiz a configuração do mutt conforme o artigo. Quando envio o e-mail não chega. como verificar se existe algun erro?

sds,
Ivomar

[21] Comentário enviado por rai3mb em 05/06/2012 - 01:24h

@ivomar veja o log, fica em /var/log/syslog

recomendo que execute o comando

cat /var/log/syslog | egrep 'mutt'

[22] Comentário enviado por rbortholin em 15/08/2012 - 09:44h

Bom dia !!!

Estou tentando enviar o e-mail, porém está me retornando a mensagem.

"Could not connect to smtp.gmail.com (Network is unreachable).
Could not send the message."

Alguém faz ideia como resolver ou verificar a origem do erro ?

[23] Comentário enviado por rai3mb em 15/08/2012 - 23:15h

@rbortholin "problema de rede inacessível" essa rede é sua? sabe se tem firewall?

[24] Comentário enviado por eabreu em 10/09/2012 - 20:43h

gostei rai3mb!!! vou criar um script em dialog.

valeu pela contribuição.


[25] Comentário enviado por mscomp em 11/09/2013 - 12:54h

rai3mb, parabéns pelo artigo, já me ajudou muito, consegui enviar email sim, sem problemas, mas ao executar o comando,

#mutt -s 'teste' murilomscomp@gmail.com

Ele entra em uma tela, acredito do mutt, aonde vai no editor nano, e depois preciso apertar y para enviar, minha dúvida é, há como enviar sem precisar entrar nessa tela? ou seja, executar o comando e ele já enviar direto o email?


Obrigado!!!

[26] Comentário enviado por hellnux em 11/09/2013 - 17:06h

@mscomp

Acredito que ele entre nessa tela porque ficou faltando o Corpo da Mensagem. Eu tentaria da seguinte forma:

echo "" | mutt -s 'teste' murilomscomp@gmail.com

[27] Comentário enviado por maicheldp em 18/04/2014 - 12:19h

No meu caso, não retornou erro, não houve log, e não chegou email...

[28] Comentário enviado por cesar em 28/04/2014 - 14:50h

Muito bom, valeu!!

[29] Comentário enviado por alexsabc em 02/06/2014 - 10:16h

Tenho a seguinte dúvida: No arquivo ~/.muttrc tem um campo de senha em texto claro. Isso gera um risco de segurança. Queria saber se tem um jeito de configurar o mutt para enviar email sem ter que informar a senha em texto claro. Gostaria (se possível) que o remetente fosse o próprio computador (localhost). Imagino que neste caso o computador deveria ter um serviço de email instalado e configurado. Se estiver errado, por favor me corrijam.

[30] Comentário enviado por woc em 17/06/2014 - 11:56h

Boa tarde, fiz alguns ajustes no seu script que ficou ótimo e atende a minha necessidade.


#!/bin/bash

echo "Bem vindo ao meu script de envio de E-mails!!!"



ASSUNTO_EMAIL="$1" #Aqui deve ser colocado o arquivo do Assunto do E-mail
CORPO_EMAIL="$2" #Aqui deve ser colocado a mensagem do Corpo do E-mail
ANEXO_EMAIL="$3" #Aqui deve ser colocado o anexo do E-mail
EMAIL_DESTINO="$4" #Aqui deve ser colocado o arquivo dos E-mails de destino

while read LINHA
do
NOME=$(echo "$LINHA" | cut -d';' -f1)
EMAIL=$(echo "$LINHA" | cut -d';' -f2)
sed "s/_NOME_/$NOME/g" "$CORPO_EMAIL" | mutt -s "$ASSUNTO_EMAIL" -a "$ANEXO_EMAIL" -- "$EMAIL"
done < "$EMAIL_DESTINO"> /dev/null


echo "E-mails enviados aos destinatarios!!!"

##Desde Já agradeço pelo Tópico##


Contribuir com comentário