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

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


Introdução



Uma das coisas que a maioria administradores de redes mais deseja é estar sempre de olho em seus servidores sem precisar acessá-los localmente. Isso é possível graças a softwares de acesso remoto, como o nosso conhecido ssh.

Geralmente acessamos nossos servidores apenas para conferir alguns arquivos, dar uma olhada nos logs de acesso etc. Quando é preciso modificar algo, o ssh é extremamente funcional, é claro. Mas quando a nossa tarefa se resume em apenas verificar arquivos?! Precisamos realmente acessar por ssh e sair entrando em pastas e conferindo arquivos ou podemos automatizar essa tarefa?! Podemos automatizar essa tarefa com uma maneira bem simples! Como?! A resposta é sendEmail.

SendEmail é um script escrito em Perl por Brandon Zhem. Com isso você não precisa instalar um servidor de e-mail completo apenas para fazer essa tarefa, diminuindo os serviços, prezando assim pela segurança do seu servidor.

Instalação do sendEmail

O sendEmail se encontra no repositório oficial do Ubuntu, então para baixá-lo podemos apenas utilizar o APT:

sudo apt-get install sendemail

Para acessar a man page do mesmo, basta digitar "sendEmail" no terminal:

sendEmail

Com ele instalado, precisaremos agora de um e-mail que aceite SMTP com o POP habilitado.

    Próxima página

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

Desenvolvendo tutoriais mais dinâmicos com o Wink

Desenvolvendo um servidor DNS no CentOS

Instalando o Windows depois do Linux

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

Baixando arquivos do Megaupload e Rapidshare pelo terminal

Leitura recomendada

Sport: Frontend para Slackbuilds ao estilo Ports do BSD

Instalação de template para monitoramento de servidor Squid e servidor LDAP no CACTI (Debian)

Softwares para Biólogos no Linux

Instalando seu Quake III Arena no Linux

Nautilus Scripts

  
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