Enviando e-mails pelo terminal

Automatizar tarefas em servidores faz parte do cotidiano de qualquer administrador de redes. Neste artigo descrevo como enviar e-mails pelo terminal utilizando o sendEmail. Mostro também vários exemplos práticos da ferramenta e uma implementação com o cron. Espero que gostem!

[ Hits: 144.862 ]

Por: Marcos Vinicius Campez em 28/08/2009 | Blog: http://bytelivre.net


Usando o sendEmail e alguns exemplos



Usando o sendEmail

Abra o terminal e digite:

sendEmail

Teremos a man page explicando todas as opções. Mas nada como alguns exemplos para você pegar o jeito, certo?! (-:

Vamos enviar agora um e-mail simples, com subject e um texto normal.

sendEmail -f meuemail@yahoo.com.br -t destinatario@gmail.com -u "Subject" -m "Mensagem aqui\!" -s smtp.mail.yahoo.com.br:25 -xu meuemail -xp 12345678

Explicando:
  • -f → e-mail do remetente, ou seja, nosso e-mail que configuramos.
  • -t → e-mail do destinatário, ou seja, o e-mail da pessoa que você irá enviar.
  • -u → título do e-mail / subject.
  • -m → mensagem em si.
  • -s → endereço do servidor SMTP.
  • -xu → nome de usuário
  • -xp → senha do e-mail

Estes campos são obrigatórios para se enviar um e-mail pelo sendEmail.

Caso você tenha feito tudo certo, aparecerá uma mensagem mais ou menos igual a essa:

Aug 26 08:23:50 meunote sendEmail[6142]: Email was sent successfully!

Se apareceu, parabéns, você está no caminho! Se apareceu outra mensagem e não enviou, dê uma olhada nos passos anteriores e confira se escreveu tudo certo.

Alguns exemplos

Mandando mensagem com anexo:

sendEmail -f meuemail@yahoo.com.br -t destinatario@gmail.com -u "Anexo" -m "Segue em anexo o arquivo resolv.conf" -a /etc/resolv.conf -s smtp.mail.yahoo.com.br:25 -xu meuemail -xp 12345678

Mensagem com conteúdo do arquivo como corpo da mensagem:

sendEmail -f meuemail@yahoo.com.br -t destinatario@gmail.com -u "Conteúdo passwd" -o message-file=/etc/passwd -s smtp.mail.yahoo.com.br:25 -xu meuemail -xp 12345678

Usando comandos do shell para personalizar o envio:

sendEmail -f meuemail@yahoo.com.br -t destinatario@gmail.com -u "`date`" -o message-file=<(ifconfig eth0) -s smtp.mail.yahoo.com.br:25 -xu meuemail -xp 12345678

Criando log do sendEmail com o conteúdo de todas as mensagens enviadas:

sendEmail -f meuemail@yahoo.com.br -t destinatario@gmail.com -u "`date`" -o message-file=<(ifconfig eth0) -a /etc/apt/sources.list -l /tmp/logsendemail -s smtp.mail.yahoo.com.br:25 -xu meuemail -xp 12345678

Define o timeout máximo, caso o seu SMTP não responda dentro deste tempo especificado o script é automaticamente encerrado:

sendEmail -f meuemail@yahoo.com.br -t destinatario@gmail.com -u "`date`" -o message-file=<(ifconfig eth0) -o timeout=1 -a /etc/apt/sources.list -l /tmp/logsendemail -s smtp.mail.yahoo.com.br:25 -xu meuemail -xp 12345678

Caso não consiga enviar no tempo de timeout aparecerá uma mensagem mais ou menos assim:

Aug 26 08:53:26 meunote sendEmail[7050]: ERROR => Timeout while connecting to smtp.mail.yahoo.com.br:25 There was no response after 1 seconds.

Lembre-se que o timeout é definido em segundos ok?!

Com isso é só usar a imaginação e acoplar o sendEmail em seus scripts. (-:

Agendando envio de e-mails

Para agendar o envio de e-mails é preciso usar o cron. Para isso entre no terminal e digite:

crontab -e Ele pedirá para escolher qual editor de texto você quer utilizar. No meu caso escolhi o nano, digitando a opção 3.

Aparecerá o arquivo de agendamento. Basta adicionar o agendamento do jeito que melhor atender suas necessidades.

No meu caso utilizei esse jeito:

30 20 * * * sendEmail -f meuemail@yahoo.com.br -t destinatario@gmail.com -u "Anexo" -m "Segue em anexo o arquivo resolv.conf" -a /etc/resolv.conf -s smtp.mail.yahoo.com.br:25 -xu meuemail -xp 12345678

Ou seja, todos os dias do mês às 20:30h será enviado um e-mail para mim com as configurações que escolhi. Detalhes de como usar o cron não serão relatados neste artigo, pois não é o objetivo do mesmo.

Viva o Linux! (-:

Página anterior    

Páginas do artigo
   1. Introdução
   2. Configurando o e-mail
   3. Usando o sendEmail e alguns exemplos
Outros artigos deste autor

Zabbix 2 no CentOS 6 - Instalação e configuração

Instalando o Windows depois do Linux

Desenvolvendo tutoriais mais dinâmicos com o Wink

Baixando arquivos do Megaupload e Rapidshare pelo terminal

Inventário "like a boss" com OCS Server

Leitura recomendada

Instalação do navegador Vivaldi no GNU/Linux

Copiar um DVD através do k9copy no Insigne Momentum 5.0

Nota Fiscal Eletrônica 2.0 em linha de comando (parte 1)

Como organizar biblioteca de músicas no computador

Como fazer um servidor de rádio virtual

  
Comentários
[1] Comentário enviado por markintux em 28/08/2009 - 13:28h

Não esqueçam de acessar: tavernadosilicio.wordpress.com e conferir mais artigos, dicas e noticias que posto no meu blog!

Abraços a todos!

[2] Comentário enviado por petslack em 28/08/2009 - 16:35h

Só um detalhe pra quem não usa o Sistema Operacional mencionado no artigo, segue o link do software para baixar os fontes e ver mais algumas opções do software.
http://caspian.dotconf.net/menu/Software/SendEmail/

[3] Comentário enviado por vitorcampox em 28/08/2009 - 16:40h

Beleza, funcionou legal aqui no meu ubuntu.

Mas e se no caso eu precisar enviar para mais de 1 destinatário?
Tem como eu usar um arquivo.txt com os destinatários por exemplo?

Abraço!

[4] Comentário enviado por xjc em 29/08/2009 - 02:05h

Brother , seu artigo é bacana, mas você podia ensinar também como deixar o servidor de email como relay sem precisar passar todos esses parametros, abraços

[5] Comentário enviado por volcom em 31/08/2009 - 10:15h

Perfeito!

Segui os passos e não teve segredo!

Parabéns

[6] Comentário enviado por gregh em 31/08/2009 - 16:07h

Interessante :D
Obrigado por comaprtihlar.

[7] Comentário enviado por vagnocasainfo em 04/09/2009 - 23:07h

Caro amigo, aqui não deu certo, gostaria de se possível obter ajuda. uso o ubuntu 9.04 acredito ter configurado corretamente mas deu o seguinte erro quando tento enviar.
Sep 04 23:04:32 ubuntu sendEmail[4415]: ERROR => Received: 501 malformed auth input (#5.5.4)
O que será que fiz errado. desde já obrigado.

[8] Comentário enviado por markintux em 05/09/2009 - 16:56h

Olá vagnocasainfo!

Mande sua linha de comando para a gente dar uma analisada ok?? Este erro nunca aconteceu comigo.

Quanto aos outros, obrigado por comentarem ok? Abraços!

[9] Comentário enviado por vagnocasainfo em 06/09/2009 - 18:32h

Olá,
a linha de comando que estou usando é.
sendEmail -f vagnogalvao@yahoo.com.br -t vaguinholg@hotmail.com -u teste -m esta é a menssagem -s smtp.mail.yahoo.com.br:25 -xu vagnogalvao@yahoo.com.br -xp 123456

[10] Comentário enviado por toyso em 07/09/2009 - 00:18h

Olá!

Obtive o mesmo erro:
Sep 07 00:06:29 sct001 sendEmail[12513]: ERROR => Received: 501 malformed auth input (#5.5.4)

Minha linha ficou assim:
sendEmail -f min@yahoo.com.br -t min@hotmail.com -u "assunto" -o message-file=/home/geovane/svn.txt -s smtp.mail.yahoo.com.br:25 -xu min -xp 123456789

Tentei várias vezes, mas o erro sempre aparece.

[11] Comentário enviado por markintux em 07/09/2009 - 15:21h

vagnocasainfo

cheque as aspas duplas no assunto e no corpo da mensagem... pode ser isso ok??


toyso

cheque as permissões do arquivo svn.txt... talvez pode ser isso...

qualquer coisa podem voltar a comentar...

obrigado a todos!

[12] Comentário enviado por toyso em 07/09/2009 - 16:18h

Salve, markintux!
Brigadão pela resposta rápida, mestre. Fico muito feliz com o interesse de gente que sabe para conosco, aprendizes.
Mestre, é o seguinte: chequei as permissões, mas o erro não é esse. Tentei enviar por diversos e-mails e sem arquivo anexado e o mesmo erro persiste. Vou listar os erros:

YAHOO:

sendEmail -f min@yahoo.com.br -t min@hotmail.com -u teste -m esta é a menssagem -s smtp.mail.yahoo.com.br:25 -xu min -xp password
Sep 07 16:13:23 sct001 sendEmail[6311]: ERROR => Received: 501 malformed auth input (#5.5.4)
(tentei sem aspas, com aspas simples e depois duplas: mesma coisa)

Domínio Próprio:

sendEmail -f min@min.com.br -t min@hotmail.com.br -u "Conteúdo passwd" -o message-file=/home/geovane/svn.txt -s smtp.min.com.br:25 -xu min@min.com.br -xp password
Sep 07 16:15:27 sct001 sendEmail[6316]: ERROR => Received: 535 5.7.8 Error: authentication failed: bad protocol / cancel

Desculpe o transtorno, markintux, é que fiquei fã dessa possiblidade de agendar o envio do e-mail e gostaria de vencer essa dificuldade. Conto com sua ajuda!

[13] Comentário enviado por markintux em 08/09/2009 - 11:17h

Olá toyso!

Te enviei um e-mail com alguns dados meus para nos comunicarmos melhor ok?? Te respondo as dúvidas por lá, acho que vai ser mais fácil para ambos certo??

Obrigado por comentar e muito obrigado pelos elogios!

Um Abraço!

[14] Comentário enviado por vagnocasainfo em 09/09/2009 - 18:38h

Olá markintux,
verifiquei as aspas duplas e nada.
Mas mesmo assim obrigado.
Vou tentar alguam solução aqui e qualquer coisa eu posto. Se tiver alguma outra dica eu agradeço.
Abraço.

[15] Comentário enviado por jlvidals em 15/09/2009 - 06:53h

Legal o artigo, se você quiz dizer ir à página principal? Então corrije a linha que diz "man page", você quiz dizer "main page" Ok?

[16] Comentário enviado por markintux em 25/09/2009 - 13:00h

victorcamposx!

Desculpe a demora, mas se ainda não encontrou um jeito de fazer isso que você quer acesse este endereço: http://www.vivaolinux.com.br/dica/Exibindo-lista-de-arquivo-TXT-em-uma-unica-linha-no-terminal/ tem uma dica minha mostrando como fazer uma lista de e-mails em txt virar apenas uma linha no terminal, deste modo você conseguirá o que deseja ok??

Mais uma vez desculpe pela demora!

Abraços!

[17] Comentário enviado por Douglas Oliveira em 25/03/2010 - 17:59h

Ola a todos!!!


Alguem sabe como eu faço para enviar as notificações do nagios via e-mail, utilizando o sendEmail com autenticação do SMTP.


Att,

Douglas Oliveira.

[18] Comentário enviado por spish em 31/05/2010 - 01:31h

Cara você é o kara kkkk, estava procurando uma solução simples como a sua. Obrigado por compartilhar seu conhecimento. Obs. Dá até para colocar quebra de linha nas mensagens "\n" muito bom mesmo.

[19] Comentário enviado por Tacioandrade em 06/06/2011 - 00:33h

Para quem assim como eu prefere utilizar o GMail para enviar os arquivos, pois aceita anexos maiores (até 20 megas), consegui depois de muitas horas aqui no google colocar para funcionar com o sendEmail.


sendEmail -f usuario@gmail.com -t destinatario@gmail.com -u "Assunto" -m "Mensagem" -a /home/andrade/anexo.txt -s smtp.gmail.com:587 -xu usuario@gmail.com -xp 'Senha'

Vou explicar um pouco o porque de minhas alterações para poder funcionar. A porta do smtp do Gmail, ao contrario da maioria dos hosts é a porta 587, diferente da maioria dos servidores. Outra coisa que muda em comparação ao envio pelo Yahoo é que o -xu (usuário de autenticação) é o e-mail inteiro, não apenas o usuário antes do @, o que me fez perder um bom tempo até conseguir.

Outra dica interessante é colocar a senha entre aspas simples ' ', pois no meu caso, ela tem caracteres especiais e não era compreendida pelo shell como uma senha, e sim como um comando ou variavel.

Espero que essa minha dica ajude muita gente por ai.

[20] Comentário enviado por cefet pet em 15/09/2011 - 14:00h

Olá, eu gostaria de saber como posso baixar e ver os emails que coloquei no servidor direto do terminal.
obrigado

[21] Comentário enviado por guidoseverus em 04/12/2011 - 15:26h

Gostei bastante, valeu.

[22] Comentário enviado por codebr em 20/02/2012 - 00:28h

Boa noite,

Porque os e-mails enviados pelo terminal usando o comando sendEmail são encaminhados para "Lixeira" dos destinatários?

[23] Comentário enviado por Tacioandrade em 20/02/2012 - 01:22h

codebr isso se dá por alguns e-mails considerarem e-mails enviados sem autenticação (como é o nosso caso) como tentativa de Spam.

Para resolver isso é só criar uma politica no seu e-mail de forma que todos que sejam recebidos do e-mail que você configurou para receber o e-mail não seja considerado com spam.

[24] Comentário enviado por contito em 13/04/2012 - 16:51h

quando tento enviar um e-mail do Gmail pelo sendEmail aparece o seguinte:


Apr 13 16:40:53 dermochelys sendEmail[5679]: NOTICE => Authentication not supported by the remote SMTP server!
Apr 13 16:40:54 dermochelys sendEmail[5679]: ERROR => Received: 530 5.7.0 Must issue a STARTTLS command first. o15sm17600017anj.1

o que escrevo no terminal é o seguinte:

user@pcname:~$ sendEmail -f meuemail@gmail.com -t meuemail@gmail.com -u "assunto" -m "mensagem" -s smtp.gmail.com:587 -xu meuemail@gmail.com -xp 'minhasenha'

e além disso meu email está com o POP3 abilitado como foi sugerido...


o que devo fazer ? Procurei algumas soluções on line e nenhuma delas deu certo (nao consegui me enviar um e-mail)

obrigado


[25] Comentário enviado por radolpho em 30/07/2012 - 13:40h

Muito bom o artigo. Fácil de seguir e funcionou.

[26] Comentário enviado por jpvr2005 em 26/08/2012 - 13:44h

EDIT: Resolvi o problema abaixo colocando um # antes de todas as linhas do meu arquivo retorno.txt, não sei pq, mas ele estava sendo interpretado como um comando.
Valeu ai!

Boa tarde Pessoal,
Uma dúvida, usei o seguinte comando para enviar o email:

sendEmail -f meuemail@algumacoisa.com.br -t destinatario@algumacoisa.com.br -u "Assunto aqui " -o message-file=<(/home/joaopaulo/retorno.txt) -s smtp.algumacoisa.com.br:25 -xu meuemail@algumacoisa.com.br -xp 'minhasenha'

Meu objetivo era enviar o arquivo retorno.txt no corpo da menssagem, porém quando envio ele me retorno o seguinte erro:

/home/joaopaulo/testip/retorno.txt: linha 1: ---------------------------------------------------------------: comando não encontrado
/home/joaopaulo/testip/retorno.txt: linha 2: erro de sintaxe próximo do `token' não esperado `|'
/home/joaopaulo/testip/retorno.txt: linha 2: `| .:: SendIp - Versao 1.0 ::. |'
Aug 26 13:26:36 joaopaulo-inspiron-n4050 sendEmail[4168]: Email was sent successfully!

Ai ele envia o email, mas sem conteudo. O conteudo do arquivo retorno.txt é:


---------------------------------------------------------------
| .:: SendIp - Versao 1.0 ::. |
---------------------------------------------------------------

### IP: 192.168.0.1




@@@ Esta é uma mensagem automática, favor não responder!

------------------------------------------------------------------

No meu caso, eu queria q ele enviasse esse arquivo ja formatado com o ip da maquina para o meu email, alguem tem alguma ideia do pq desse erro?

Valeu, abç a todos!

[27] Comentário enviado por viniciuspdutra em 13/12/2013 - 10:19h

Fala galera, estou utilizando o sendEmail em vários scripts que fiz, porem se eu agendar no cron, ele só envio enquanto eu estiver logado no server, se eu desconectar a tarefa do cron funciona normalmente más o e-mail não é enviado.
Alguém consegue me ajudar com isso?

Segue a linha em questão:
sendEmail -f $EMAIL_FROM -t $EMAIL_TO -u "$ASSUNTO" -m "$MENSAGEM" $ANEXO -s $SERVIDOR_SMT P -xu $EMAIL_FROM -xp $SENHA

[28] Comentário enviado por laripetruzzellis em 19/02/2014 - 17:40h

Olá! Estou tentando enviar um email e aparece isso: Feb 19 17:29:56 larissa-desktop sendEmail[9088]: ERROR => Timeout while connecting to smtp.mail.yahoo.com.br:25 There was no response after 60 seconds.

Como resolvo? Tentei reenviar várias vezes... a linha de comando que usei: -f laripetruzzellis@yahoo.com.br -t laripetruzzellis@yahoo.com.br -u "Teste" -m "teste" -s smtp.mail.yahoo.com.br:25 -xu meuusuario -xp minhasenha

será que é pq estou testando pra me mandar? mas isso não faz sentido... Estou usando acesso remoto, e a conexão do outro comp é ótima. não sei o que fazer. Obrigada!

[29] Comentário enviado por markintux em 19/02/2014 - 18:08h

Olá Larissa!

O que pode estar acontecendo é que a algum tempo, os servidores de e-mails trocaram a porta de 25 para a 587 do protocolo SMTP. Dê uma olhada se isso resolve. Caso não resolva, dê uma olhada melhor se está ativado o SMTP no seu e-mail do Yahoo. Eu sugiro, que troque o Yahoo pelo Gmail, já que o Gmail já vem com o SMTP ativo, sendo: smtp.gmail.com.

Espero ter ajudado!

Abraços.


[28] Comentário enviado por laripetruzzellis em 19/02/2014 - 17:40h:

Olá! Estou tentando enviar um email e aparece isso: Feb 19 17:29:56 larissa-desktop sendEmail[9088]: ERROR => Timeout while connecting to smtp.mail.yahoo.com.br:25 There was no response after 60 seconds.

Como resolvo? Tentei reenviar várias vezes... a linha de comando que usei: -f laripetruzzellis@yahoo.com.br -t laripetruzzellis@yahoo.com.br -u "Teste" -m "teste" -s smtp.mail.yahoo.com.br:25 -xu meuusuario -xp minhasenha

será que é pq estou testando pra me mandar? mas isso não faz sentido... Estou usando acesso remoto, e a conexão do outro comp é ótima. não sei o que fazer. Obrigada!




Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts