Você já deve saber que um servidor nada mais é do que um computador que presta um serviço para os softwares clientes. Suponha que existam dois softwares do mesmo tipo (por exemplo, dois servidores HTTP: um um Apache e um Xitami) rodando no servidor. Você poderá, em uma única máquina, executar os dois softwares simultaneamente para poder obter recursos diferentes.
Para que você possa executar estes dois serviços de rede distintos, deve recorrer ao número de porta. Uma porta é simplesmente uma abstração para que o software cliente possa fazer uma distinção entre dois serviços de rede diferentes. Um número de porta não constitui uma conexão física e sim lógica. O computador associa um número de porta para um software HTTP e outro para um software FTP. Para que possamos executar serviço do Apache e outro do Xitami ao mesmo tempo, deveremos simplesmente indicar para nosso software cliente o número de porta que cada um destes softwares irá utilizar.
Vejamos um exemplo da aplicação do número de porta em um browser:
http://www.sun.com:80
Não é comum utilizarmos o número de porta após o nome de domínio. Isso porque existem alguns números-padrão de portas na Internet. Por exemplo, costuma-se atribuir a um servidor FTP o número 21, enquanto que um servidor HTTP deverá utilizar o número 80. Vejamos alguns números de porta bem conhecidos:
SERVIÇO DE REDE PORTA
ftp 21
telnet 23
smtp 25
finger 79
http 80
pop3 110
O protocolo SMTP
Como você já sabe, o protocolo
SMTP é um protocolo que se coloca sobre o TCP/IP. O
servidor SMTP espera que os clientes lhe enviem mensagens
de email que necessitam ser entregues.
A seguinte tabela mostra os passos envolvidos no envio de
uma mensagem a um servidor SMTP:
String Descrição
HELO computador.nome.dominio Inicia a comunicação
com o servidor SMTP
MAIL FROM:
usuario@endereco.correio.eletronico Especifica quem está
enviando a mensagem
RCPT TO:
usuario@endereco.correio.eletronico Especifica quem vai receber
a mensagem
DATA Especifica que os dados da mensagem vêm a seguir
(mensagem...) Especifica os dados da mensagem
. Um ponto que especifica o final da mensagem
QUIT Fecha a conexão
O seguinte aplicativo (JavaMail.java) envia mensagens de email utilizando o protocolo SMTP:
import java.io.*;
import java.net.*;
public class JavaMail {
// envia mensagens
static PrintStream ps = null;
// recebe mensagens
static DataInputStream dis = null;
public static void send(String str) throws IOException
{
ps.println(str);
ps.flush();
System.out.println(Java enviado: + str);
}
// resposta do SMTP
public static void receive() throws IOException
{
String readstr = dis.readLine();
System.out.println(Resposta: + readstr);
}
public static void main (String args[])
{
String HELO = HELO ;
String MAIL_FROM = MAIL FROM: usuario@endereco.com ;
String RCPT_TO = RCPT TO: usuario@endereco.com ;
String SUBJECT = SUBJECT: JavaMail!;
String DATA = DATA; // comoço da mensagem
// Nota:
.
indica o fim da mensagem
String BODY = Java enviou isto!
.
;
Socket smtp = null; // socket SMTP
try { // Nota: 25 é a porta default de SMTP
smtp = new Socket(smtp.servidor.com, 25);
OutputStream os = smtp.getOutputStream();
ps = new PrintStream(os);
InputStream is = smtp.getInputStream();
dis = new DataInputStream(is);
}
catch (IOException e)
{
System.out.println(Erro conectando: + e);
}
try { // SMTP HELO
String loc = InetAddress.getLocalHost().getHostName();
send(HELO + loc);
// resposta SMTP
receive();
// envia SMTP
send(MAIL_FROM);
// pega resposta SMTP
receive();
send(RCPT_TO);
// pega resposta SMTP novamente
receive();
// envia begin de SMTP
send(DATA);
// pega resposta SMTP
receive();
// envia SUBJECT de SMTP
send(SUBJECT);
// pega a resposta de SMTP
receive();
// envia o corpo da mensagem
send(BODY);
// pega a resposta de SMTP novamente !
receive();
// fecha conexão
smtp.close();
}
catch (IOException e)
{
System.out.println(Erro ao enviar: + e);
}
System.out.println(Mensagem enviada com sucesso!);
}
}
Você deve observar que a porção de dados da mensagem de correio eletrônico tem duas seções, um cabeçalho e o corpo. No cabeçalho, você especifica uma informação adicional à respeito da mensagem. No exemplo anterior, o código define o assunto da mensagem. Para executar o aplicativo, você deve mudar (via código) o nome do domínio SMTP, assim como os endereços do remetente e do destinatário da mensagem de email.
Um abraço e até a semana que vem.