segunda-feira, 26 de outubro de 2009

Enviando e-mail diretamente através da linha de comando

Começarei minhas postagens neste blog por um assunto que me chamou atenção por algum tempo: enviar e-mail para servidores reais pela linha de comando.


Em meu curso estudei alguns protocolos de comunicação, entre eles os protocolos de e-mail: SMTP, IMAP e POP3. Vi os comandos que eram utilizados para se enviar e receber um e-mail, porém havia um problema: para testá-los tínhamos que instalar nosso próprio servidor de e-mail e configurá-lo para então por Telnet utilizar os comandos. Porém a idéia de testar os comandos apenas em laboratório não me agradava muito. Eu queria comunicar com servidores reais tal como Yahoo, Gmail e outros. Como minha conta de e-mail mais utilizada é a do Gmail resolvi começar a pesquisar como enviar um e-mail para os servidores de email da Google.


Caso precise de ajuda quanto aos comando do SMTP, IMAP ou do POP3:

http://pt.kioskea.net/contents/internet/smtp.php3


Para podermos receber qualquer e-mail por um cliente devemos também ajustar duas configurações na nossa conta de e-mail. Acessando minha conta do Gmail eu vou em Configurações → Encaminhamento e POP/IMAP, aqui ativamos o POP na opção Ativar POP para todos os e-mails e o IMAP na opção Ativar IMAP.


Para enviar e-mail para o Gmail precisamos primeiro saber qual é o seu servidor e qual a porta que deveremos acessar para enviar ou receber um e-mail. O proprio Gmail possui essas informações:


Servidor de entrada de e-mail (IMAP) - requer SSL

imap.gmail.com
Utilizar SSL: Sim
Porta: 993

Servidor de entrada de e-mail (POP3) - requer SSL

pop.gmail.com
Utilizar SSL: Sim
Porta: 995

Servidor de saída de e-mail (SMTP) - requer TLS

smtp.gmail.com(usa autenticação)
Usa autenticação: Sim
Utilizar STARTTLS: Sim (alguns clientes o chamam de SSL)
Porta: 465 ou 587


Como a tabela acima indica podemos enviar o e-mail por SMTP para 2 portas diferentes: a 465 e a 587. Todas as duas exigem uma conexão criptografada, a diferença está que a 465 exige protocolo SSL de criptografia, já a porta 587 exige o protocolo TLS.


Para criar uma conexão criptografada utilizei o openssl que é uma ferramenta que implementa os protocolos SSL e TLS.


Para instalar basta o comando:

sudo apt-get install openssl


Agora com a ferramenta instalada vamos criar uma conexão. Porém como temos duas portas que esperam diferentes protocolos então temos também diferentes sintaxes para cada uma delas. Para conectar na porta 465 utilize o comando:

openssl s_client -crlf -connect smtp.gmail.com:465


Como a porta 587 utiliza TLS, para se conectar por ela devemos especificar ao openssl que utilize este tipo de criptografia, com isto o comando ficaria o seguinte:

openssl s_client -crlf -starttls smtp -connect smtp.gmail.com:587


Enviamos um helo para nos identificarmos:

HELO nome_qualquer


Agora temos que nos autenticar, a autenticação é feita da seguinte maneira:

AUTH PLAIN usuario_e_senha_criptografados_em_base_64


Para criarmos a chave com nosso usuario e senha criptografados em base 64 podemos utilizar um comando em Perl:

perl -MMIME::Base64 -e 'print encode_base64("\000usuario\@gmail.com\000senha")'


Agora informamos o remetente do email:
MAIL FROM: <usuario@gmail.com>


E o destinatário:
RCPT TO: <destino@gmail.com>

Informamos que a mensagem irá iniciar logo após o comando:

DATA


Agora podemos começar a digitar o email:
From: Remetente <remetente@gmail.com>

To: Destinatário <destinatario@dominio.com>

Subject: Assunto do Email


Conteúdo

Para finalizarmos o e-mail saltamos uma linha digitamos um ponto (.) e saltamos mais uma linha.


E pronto enviamos um e-mail sem utilizar nenhum cliente de e-mail.



Nenhum comentário:

Postar um comentário