Enviando e-mail pelo shell com smtp remoto

O SendEmail é um cliente smtp em Perl script. Neste artigo vamos ver suas principais aplicações práticas.

[ Hits: 53.211 ]

Por: Carlos Affonso Henriques. em 22/11/2007 | Blog: http://www.ahenriques.eti.br


Introdução

Por quê

Com a grande difusão de conexões de banda larga, hoje é extremamente comum a qualquer administrador precisar acessar máquinas com IP dinâmico, que são alterados a cada nova conexão. Eu por exemplo tenho como a maioria dos meus clientes, pequenas empresas que dispõem de conexões ADSL ou cabo coaxial e frequentemente preciso saber o IP que suas máquinas assumem, receber logs, alertas em caso de falha de algum serviço e etc.

Poderia configurar um MTA com Sendmail e agendar o envio periódico de emails para mim, mas isso tem uma série de inconvenientes, tais como a complexidade e o uso de mais um serviço que pode comprometer a segurança do sistema. Pensando nisso Brandon Zhem (http://caspian.dotconf.net) escreveu este script em Perl, que é um completo cliente smtp.

Neste pequeno artigo vou comentar suas principais funcionalidades com exemplos práticos de aplicação.

As opções do sendEmail

Este é o resumo de suas principais funções traduzidas do help do SendEmail. Basta digitar o script sem opções e ele exibirá seu help primário.

sendEmail-1.55 by Brandon Zehm <caspian@dotconf.net>

Sinopse: sendEmail -f ADDRESS [options]

Parâmetros obrigatórios:
  • -f - Endereço de e-mail do remetente.
  • -t - É o "target" ou seja o(s) email(s) de destino.
  • -u - Refere-se ao SUBJECT e deve estar delimitado entre aspas para que o shell não o interprete.
  • -m - Refere-se ao corpo da mensagem que igualmente deve estar delimitado por aspas.
  • -s - É onde deve ser especificado o endereço de seu servidor SMTP, caso não seja especificado nenhum o default é localhost:25, sua notação é o endereço do smtp seguido da porta em que ele estiver escutando. Ex: mail.yahoo.com.br:25.

Parâmetros opcionais:
  • -a - Trata-se dos "atachments" bastando apontar o path do(s) arquivos que deseja-se enviar separados por espaços.
  • -cc - Carbon copy, envia mensagens para múltiplos endereços, exibindo na mensagem todos os endereços que a receberam.
  • -bcc - Blanck carbon copy, idêntica a anterior porém não exibe os demais endereços que receberam a mensagem.
  • -xu USERNAME - O nome de login do seu servidor smtp, em alguns casos pode ser o seu endereço de e-mail completo.
  • -xp PASSWORD - Senha do seu servidor smtp.

Paranormal:
  • -b BINDADDR[:PORT] - Esta opção é usada quando você rodar o sendEmail em uma estação ou servidor que esteja atrás de um gateway com regras de firewall que impeçam o envio de mensagens pela porta 25, neste caso consulte o administrador do firewall para saber qual o IP e porta que está sendo usada para o redirecionamento.
  • -l LOGFILE - Grava em um arquivo todas as mensagens de saída do script sendEmail.
  • -v - Modo verbose, exibe mensagens do processo de envio detalhadas.
  • -q - Modo silencioso, não exibe nenhuma mensagem STDOUT do script sendEmail.
  • -o parâmetro=valor - Refere-se a parâmetros avançados, digite "sendEmail --help misc" para exibir o help detalhado deste parâmetro.
  • -o message-file=FILE - Envia o conteúdo de um arquivo como corpo da mensagem.
  • -o reply-to=ADDRESS - Refere-se ao endereço de resposta do e-mail que você enviar.
  • -o timeout=SECONDS - Define o time out máximo, caso o seu smtp não responda dentro deste tempo especificado o script é automaticamente encerrado.
  • -o username=USERNAME - O parâmetro -xu é um alias para este parâmetro.
  • -o password=PASSWORD - O parâmetro -xp é um alias para este parâmetro.
  • -o tls=<auto|yes|no> - Quando o servidor smtp emprega criptografia para autenticação e mensagens, neste caso você terá que tem as bibliotecas SSL instaladas na máquina em que estiver rodando o sendEmail.
  • -o fqdn=FQDN - Serve para configurar o nome de domínio qualificado, normalmente esta opção não é necessária sendo o próprio nome de domínio do seu servidor smtp, mas há casos que isso se faz necessário, como por exemplo se você tiver um MTA sem um domínio válido, neste caso você especificaria um neste parâmetro.

Help:
  • --help - Ajuda básica.
  • --help addressing - Ajuda relativa a endereços de envio e resposta opções -f -t e -o.
  • --help message - Ajuda relativa a mensagens opções -a e -o.
  • --help networking - Ajuda relativa as chaves -b e -s.
  • --help output - Ajuda relativa a logs e mensagens de saída, opções -v -q e -l.
  • --help misc - Ajuda para opções avançadas, opções -o e autenticação.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Exemplos práticos
Outros artigos deste autor

SSHFS no CentOS, Slackware e Windows - Simples e rápido

Gateway autenticado com Apache, Iptables e CGI em shell

Customizando e atualizando o Slax

Administrando usuários no GNU/Linux e Samba via web com PHP

Balanceamento de carga e alta disponibilidade com Bonding Driver e Iproute2

Leitura recomendada

Mutt - o melhor amigo do homem

Servidor de e-mail com OpenBSD - Postfix & Cia

Instalação e configuração do Spamassassin

Implementando o Interscan VirusWall com Postfix

Bloqueando SPAM no Kmail com o SpamAssassin

Comentários
[1] Comentário enviado por vhprice em 22/11/2007 - 13:38h

100%!

Parabens!

[2] Comentário enviado por exercitobr em 22/11/2007 - 15:44h

Estava atrás desse tipo de informação. Parabéns!

[3] Comentário enviado por dailson em 28/11/2007 - 12:27h

Testei mas tenho o mesmo problema que tenho com os clientes de email do linux.
Como faço para enviar um email HTML pra um cliente.
Quando anexo o fonte.hmtl ao invés de ser exibido o email no cliente, é exibido o código fonte.
Como fazer?

[4] Comentário enviado por capitainkurn em 30/11/2007 - 08:15h

Amigo, eu particularmente abomino e-mails em html, não testei esta possibilidate mas em princípio você deveria enviar o seu fonte.html como corpo da mensagem e não anexo como você afirmou. Há uma explicação de como fazer isso na seção exemplos práticos do artigo.

Grande abraço!

[5] Comentário enviado por andrade-pr em 17/02/2008 - 23:34h

Parabéns amigo.

Seu artigo é simplesmente fantástico.
Estava a procura de um script que fizesse o serviço de envio de e-mail sem a necessidade de instalar um MTA.
E esse funciona mesmo.
Simplesmente nota 10. Parabéns novamente.

Abraço.

[6] Comentário enviado por jmbarros em 07/05/2008 - 19:11h

Muito bom... muito bom mesmo...so não consegui fazer o sendEmail pegar o destinatário de um aquivo texto ou de uma variável...tem uma idéia?

[7] Comentário enviado por jmbarros em 07/05/2008 - 19:35h

Opa... desculpa ai... sono e muito café resultam nisso... é so colocar a variavel...me perdoem ...fica ssim

sendemail -f mail -t $1 -u "teste" -m "mensagem de teste" -s smtp -xu user -xp pass

[8] Comentário enviado por paulopugin em 08/05/2008 - 17:58h

Opá, estou tentando usar os comando mas estou tendo problemas com todas as contas de email que eu tentei usar

com o Gmail deu o seguinte erro:
May 08 17:51:49 suporte sendEmail[14421]: NOTICE => Authentication not supported by the remote SMTP server!
May 08 17:51:49 suporte sendEmail[14421]: ERROR => Received: 530 5.7.0 Must issue a STARTTLS command first. q19sm3263468qbq.30


com o hotmail deu este :
May 08 17:53:59 suporte sendEmail[14451]: ERROR => Connection attempt to smtp.hotmail.com:25 failed: IO::Socket::INET: Bad hostname 'smtp.hotmail.com'

com o excite este:
May 08 17:54:43 suporte sendEmail[14462]: ERROR => Received: 535 Error: authentication failed


em outro aqui:
May 08 17:57:40 suporte sendEmail[14523]: ERROR => Connection attempt to smtp.mail.tecla.com.br:110 failed: IO::Socket::INET: Bad hostname 'smtp.mail.tecla.com.br'


alguém pode me ajudar??

[9] Comentário enviado por capitainkurn em 08/05/2008 - 21:26h

O que certamente está ocorrendo é que seu servidor smtp está com nome errado. experimente smtp.tecla.com.br ou mail.tecla.com.br ou entre em contato com o suporte do provedor.

[10] Comentário enviado por Lima2008 em 12/05/2008 - 12:22h

?comentario=Era exatamente oque eu procurava para backup de clientes. funcionou perfeitamente, Obrigado.

[11] Comentário enviado por removido em 28/05/2008 - 10:32h

alguem ae conseguiu funcionar??? tudo q eu ponho acaba com o msm erro do amigo ae de cima... alguem pode me ajudar?? to precisando bastante desse serviço...

[12] Comentário enviado por removido em 28/05/2008 - 10:34h

com o hotmail eu tentei.. dei uma pesquisada e vi que ele não tinha o serviço de smtp... agora tentei com o do gmail, no qual todos afirmam que tem.. e a mensagem de erro é essa:

May 28 10:33:18 markin-laptop sendEmail[28416]: NOTICE => Authentication not supported by the remote SMTP server!
May 28 10:33:18 markin-laptop sendEmail[28416]: ERROR => Received: 530 5.7.0 Must issue a STARTTLS command first. 5sm21495364ywl.4

alguem ae pode me ajudar??

[13] Comentário enviado por removido em 28/05/2008 - 10:50h

tentei agora com um servidor que existe smtp e que a empresa aqui usa.. está tudo certo.. mas aparece o seguinte erro:

May 28 10:46:51 markin-laptop sendEmail[9103]: ERROR => Received: 501 #5.5.4 cannot decode AUTH parameter meuemail@meudominio.org.brmeuemail@meudominio.

??

[14] Comentário enviado por Lima2008 em 28/05/2008 - 16:08h

Coloque o comando que enviou, sem ver oque está fazendo não sei como lhe ajudar, adianto que aqui fiz funcionar com o gmail e com o yahoo, ambos funcionam perfeitamente, embora o gmail bloqueie anexos com extenção .tar.gz

[15] Comentário enviado por removido em 28/05/2008 - 16:48h

Lima... desculpa.. tá ae o erro:

root@markin-laptop:/home/markin# sendEmail -f atpmarkin@yahoo.com.br -t xmarkinx@hotmail.com -u "Subject" -m "Mensagem Teste" -s smtp.mail.yahoo.com.br:25 -xu atpmarkin -xp 12345678
May 28 16:45:21 markin-laptop sendEmail[18862]: ERROR => Received: 535 authorization failed (#5.7.0)

tentei de outra forma:

root@markin-laptop:/home/markin# sendEmail -f atpmarkin@yahoo.com.br -t xmarkinx@hotmail.com -u "Subject" -m "Mensagem Teste" -s mail.yahoo.com.br:25 -xu atpmarkin -xp 12345678
May 28 16:47:27 markin-laptop sendEmail[19934]: ERROR => Timeout while connecting to mail.yahoo.com.br:25 There was no response after 60 seconds.

vlw pela atenção...
fico no aguardo!

[16] Comentário enviado por Lima2008 em 28/05/2008 - 17:12h

entendi, mas no site do yahoo você habilitou para acesso pop? Se não fez é esse o motivo do erro, porque aparentemente oque está fazendo está correto.

[17] Comentário enviado por removido em 29/05/2008 - 07:40h

Nossa cara!!! vlw ae!! era isso mesmo brow!!! Resolvido o problema!! com o email do yahoo mandei sussa!!!! vlw msm lima!! =D

[18] Comentário enviado por paulopugin em 12/06/2008 - 16:49h

Pessoal,
qual a sintaxe que vocês usaram nos seus emails, aqui eu só consegui fazer funcionar no yahoo desta forma:
sendEmail -f meuusuario@yahoo.com.br -t email@destinatario.com.br -u "$assunto" -m "$mensagem" -s smtp.mail.yahoo.com.br:25 -xu meusuario -xp minhasenha

só com o yahoo eu consegui com mais nenhum outro.

[19] Comentário enviado por Lima2008 em 12/06/2008 - 18:34h

Testei tanto com o yahoo como com o Gmail, lembro que para usar tem que estar setada a opção de redirecionamento pop, caso contrario não funciona.

[20] Comentário enviado por eduardo_jst em 16/02/2009 - 09:52h

Vc conhece o help desk onerzero, vc sabe como eu faço para usar um script para enviar email com integração com o oneerzero e sendemail?

att

[21] Comentário enviado por capitainkurn em 16/02/2009 - 18:33h

Não faço a mínima idéia, só testando para ver mas estou sem tempo.

[22] Comentário enviado por bbgshow em 13/07/2009 - 17:59h

ei alguém pode me ajudar é q to tentando usar o comando como disseram mas ñ tá indo demora demais e não sai disso, depois q to enter no comando
- comando q coloquei foi este:

sendmail -f daniel@universalrn.com.br -t doliveira@universalrn.com.br -u "Subject entre aspas" -m "isso e so um teste" -s smtp.universalrn.com.br:25 -xu usuario -xp "minha senha"

[23] Comentário enviado por renato.v em 17/08/2011 - 12:48h

bbgshow, você está usando o comando errado, não é "sendmail" mas sim "sendemail". Aliás, aqui está tudo funcionando perfeitamente usando minha conta do YAHOO e o endereço "smtp.mail.yahoo.com.br:25" para SMTP.

[24] Comentário enviado por renato.v em 17/08/2011 - 12:50h

Alguém conheceria uma ferramenta semelhante ao "sendEmail" descrito no artigo, mas que faça o inverso? Ou seja, em vez de enviar e-mails via SMTP pelo shell, estou atrás de uma ferramenta que receba e-mails via POP3. Alguém conhece?


Contribuir com comentário