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!
-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:
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.
[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/
[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
[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.
[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
[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)
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!
[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.
[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.
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.
[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.
[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:
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 é:
[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!