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.006 ]

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

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

Mostrando dicas ao iniciar o terminal

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

Yad 0.16 - Eu quero sempre mais de ti

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

Leitura recomendada

Mostrando dicas ao iniciar o terminal

Introduzindo prazerosamente aos poucos... o shell script

AWK - Manipulação de arquivos de texto

expr - Definição e uso do comando

Montando, monitorando e gerando logs dos compartilhamento NFS automaticamente

  
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