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

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

Desenvolvendo um servidor DNS no CentOS

Baixando arquivos do Megaupload e Rapidshare pelo terminal

Inventário "like a boss" com OCS Server

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

Desenvolvendo tutoriais mais dinâmicos com o Wink

Leitura recomendada

VirtualBox + PhpVirtualBox + Ubuntu 14.04 Server

A importância do modo texto

ISPConfig 3 no CentOS 6.4 64 bits

VPN com pptpd com acesso a compartilhamentos

Ktechlab - Ambiente de simulação de circuitos

  
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