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: 77.942 ]

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


Dicas extras



1 - Envio de e-mail para diversos destinatários:

Você pode criar uma forma de enviar e-mail para diversos destinatários com uma única linha ;-).

Crie um arquivo com todos os destinatários desejados, exemplo:

nano destinatarios

rai3mb@gmail.com
fulano@gmail.com
sicrano@gmail.com

Depois basta abrir o terminar e enviar seu e-mail para sua lista:

echo 'Este é um e-mail teste enviado para mim mesmo ;-)' | mutt -s 'teste para VOL' -a pgadmin.log log-7z.txt -- $(cat destinatarios | tr '\n' ' ')

2 - Agora com um simples script pra automatizar o envio da mensagem, adaptando ao destinatário, como aqueles e-mails promocionais:

#!/bin/bash
ASSUNTO="$1"
CONTEUDO="$2"
DESTINATARIOS="$3"
while read LINHA
do
	NOME=$(echo "$LINHA" | cut -d';' -f1)
	EMAIL=$(echo "$LINHA" | cut -d';' -f2)
	sed "s/_NOME_/$NOME/g" "$CONTEUDO" | mutt -s "$ASSUNTO" "$EMAIL"
done < "$DESTINATARIOS"

Salve o conteúdo acima num arquivo, salvei como 'send_mail.sh', depois dê permissão de execução:

chmod +x send_mail.sh

Altere ou crie o arquivo com o e-mail dos destinatários colocando o nome deles na frente do e-mail, separando por ';' (ponto e virgula):

Exemplo:

Raimundo Portela;rai3mb@gmail.com
Fulano da Silva;fulano@gmail.com
Sicrano Santos;sicrano@gmail.com

Salvei este como 'destinatarios'.

Agora crie um arquivo com o conteúdo da mensagem, parametrizando o nome do destinatário com _NOME_:

Convite para evento!

Sr. _NOME_, convidamos você para participar do "PAGUE MUITO, GANHE POUCO", venha conhecer nossa loja ;-)

Att,
Marmelada

Salvei este como 'conteudo_do_email'.

Agora basta chamar o script, informando o assunto, o arquivo com o conteúdo do e-mail e o arquivo com os destinatários:

./send_mail.sh 'Promoção fajuta' conteudo_do_email destinatarios
Linux: Enviar e-mail pelo terminal com mutt

Você pode seguir essa dica da parametrização para informar diversos campos mutáveis no conteúdo do seu e-mail.

Existem outras dicas na internet (como o primeiro link das referências) que ajudam a configurar o mutt para receber e-mails também, mas vejo mais utilidade apenas no envio rápido de e-mail pelo terminal, para ler prefiro o método tradicional.

Dar pra fazer muita coisa, olha lá não vão fazer envio de spam ;-)

Referências


Abraços,
@rai3mb

Página anterior    

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

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

Explorando a entrada de dados com READ em Bash Shell

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

Yad 0.16 - Eu quero sempre mais de ti

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

Leitura recomendada

Personalize seu shell na entrada de seu logon

Trabalhar com array no Bash

Discar BrasilTelecom com PPPOE no Ubuntu 6.10

O que é Shell Script

As maravilhas do 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 removido 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 removido 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##

[31] Comentário enviado por dexter_ em 21/01/2016 - 20:53h

Cara.. não consegui enviar corretamente alguém sabe porque? olha a saida do comando

SASL authentication failed
Não foi possível enviar a mensagem.

[32] Comentário enviado por felipeassuncaoj em 14/07/2016 - 09:14h

Stefano,

Habilite "acesso a aplicativos menos seguros" na conta do gmail.
Senao, o google so aceita acesso dos seus proprios apps.

Abraço

[33] Comentário enviado por zenas em 21/12/2016 - 17:43h

Fácil e útil! Obrigado.

[34] Comentário enviado por acsoprana em 28/07/2017 - 13:34h

Olá pessoal, solução de grande ajuda vlw pelo post..

mas eu gostaria de saber como eu faria utilizando o sed para alterar 2 parâmetros no conteúdo?

sed "s/_NOME_/$NOME/g" "$CONTEUDO" | mutt -s "$ASSUNTO" "$EMAIL"

gostaria de acrescentar mais uma variável no comando sed para substituí no "$CONTEUDO" seria possível??


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts