Redes de Computadores Grupo de Redes de Computadores E-Mail – Correio Electrónico Arquitectura Diferentes cenários possíveis Quatro componentes base: – MUA (Mail User Agent) Software cliente que corre do lado do utilizador e permite a gestão do correio electrónico o Exemplo: Microsoft Outlook, Mozilla Thunderbird, Gmail – MTA (Mail Transfer Agent) Software responsável pela transferência do correio electrónico entre computadores o Exemplo: Postfix, Exim, Sendmail, Exchange, Qmail – MDA (Mail Delivery Agent) – tipicamente incluído juntamente com o MTA destino Componente responsável pela entrega local do correio do utilizador depois de recebido pelo MTA. – MAA (Message Access Agent) Permite a um cliente aceder à sua caixa de correio remotamente (servidor POP/IMAP) ISEL-ADEETC-GRC 2 1º Cenário – Clientes Webmail Servidor de Mail Mail Mail UA UA Interface Webmail Origem ISEL-ADEETC-GRC Destinatário 3 2º Cenário – Clientes de Webmail diferentes Servidor de Mail MTA Cliente Servidor de Mail MTA Servidor Mail Mail UA UA Interface Webmail Interface Webmail Destinatário Origem ISEL-ADEETC-GRC 4 3º cenário (o mais comum) MTA Cliente UA MAA Cliente UA Destinatário Origem Mail Mail Servidor de Mail MTA Servidor/Cliente Mail ISEL-ADEETC-GRC Servidor de Mail MTA Servidor MAA Servidor 5 E-Mail – Correio Electrónico Grupo de Redes de Computadores User Agent User agent Permite ao utilizador gerir o seu correio electrónico User Agent Compor Mensagens Ler Mensagens Responder a Mensagens ISEL-ADEETC-GRC Reencaminhar Mensagens Gerir a Caixa de Correio 7 Formato do Correio Electrónico Nuno Cruz Rua Conselheiro Emídio Navarro, 1 1959-007 Lisboa Portugal Google Inc. 1600 Amphitheatre Parkway Mountain View, CA 94043 USA Google Inc. 1600 Amphitheatre Parkway Mountain View, CA 94043 USA MAIL FROM: [email protected] RCPT TO: [email protected] Envelope From: ―Nuno Cruz‖ <[email protected]> To: ―Google IPv6‖ <[email protected]> Date: 21/04/2009 Subject: Acesso IPv6 Cabeçalho Assunto: Acesso IPv6 Caros, Pedimos desta forma que nos permitam o acesso através de IPv6 aos vossos servidores. Cumprimentos, Nuno Cruz Caros, Pedimos desta forma que nos permitam o acesso através de IPv6 aos vossos servidores. Cumprimentos, Corpo Nuno Cruz Mensagem ISEL-ADEETC-GRC 8 Formato dos endereços A partir do domínio é possível através de registos DNS do tipo MX, obter a lista de servidores de correio electrónico ISEL-ADEETC-GRC 9 MIME (Multipurpose Internet Mail Extensions) Permite o transporte transparente de dados genéricos sobre o correio electrónico – é uma metadata que descreve o formato do conteúdo – O protocolo que permite o envio de mensagens (SMTP) só permite o uso de caracteres ASCII a 7 bits (sem acentos e caracteres ―printáveis‖) Utilizador • UA MIME MTA MTA • Ascii 7-bit • Ascii 7-bit ISEL-ADEETC-GRC MIME Utilizador • UA 10 Cabeçalhos MIME Cabeçalho do Email MIME-Version: ―versão do MIME‖ Content-Type: ―tipo/subtipo‖ Content-Transfer-Encoding: ―tipo de codificação‖ Cabeçalhos MIME Corpo do Email Date: Tue, 21 Apr 2009 22:12:10 +0100 From: Rui Santos <[email protected]> To: Nuno Cruz <[email protected]> Subject: Vê lá se te interessa MIME-Version: 1.0 Content-Type: text/plain; Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Cabeçalhos MIME Programa da conferência … ISEL-ADEETC-GRC 11 Content-Type (Tipos e subtipos) Tipo Subtipo Descrição Texto Plain Não Formatado HTML HTML Mixed Diferentes partes ordenadas com tipos de dados diferentes Alternative As diferentes partes são diferentes formas de representar o mesmo conteúdo RFC822 O corpo é uma mensagem encapsulada Partial Parte de uma mensagem fragmentada JPEG Imagem no formato JPEG GIF Imagem no formato GIF Video MPEG Vídeo em MPEG Application Octet-Stream Tipo genérico de dados a 8 bits (usado na maioria dos anexos) Multipart Message Image ISEL-ADEETC-GRC 12 Content-Transfer-Encoding (Tipos de codificação) Tipo Descrição 7bit Ascii ―printável‖ 8bit Caracteres não ASCII formatados com linhas (CRLF) O servidor tem de suportar a extensão 8BITMIME Binary Qualquer sequência de octetos O servidor tem de suportar a extensão BINARYMIME Base64 Usado para codificar sequências de octetos que satisfaçam a regra dos 7bits Quoted-printable Como o anterior mas de forma legível, desde que se use um código de página dos EUA, os restantes caracteres não são legíveis (codificados como um sinal de ―=― seguido do código do caracter ISEL-ADEETC-GRC 13 Base64 Converte dados genéricos para sequências de caracteres ―printáveis‖ Divide a sequência de bits em blocos de 6 bits, codifica esses 6 bits em ASCII ―printável‖ A sequência de caracteres ISEL resulta em ―SVNFTA==― ISEL-ADEETC-GRC 14 Base64 - Tabela Valor Char Valor Char Valor Char Valor Char Valor Char Valor Char 0 A 11 L 22 W 33 h 44 s 55 3 1 B 12 M 23 X 34 i 45 t 56 4 2 C 13 N 24 Y 35 j 46 u 57 5 3 D 14 O 25 Z 36 k 47 v 58 6 4 E 15 P 26 a 37 l 48 w 59 7 5 F 16 Q 27 b 38 m 49 x 60 8 6 G 17 R 28 c 39 n 50 y 61 9 7 H 18 S 29 d 40 o 51 z 62 8 I 19 T 30 e 41 p 52 0 63 9 J 20 U 31 f 42 q 53 1 10 K 21 V 32 g 43 r 54 2 ISEL-ADEETC-GRC / 15 Quoted-printable Todos os caracteres que não sejam ―printáveis‖ são representados pelo sinal de igual seguido do código ASCII do carácter em hexadecimal. O próprio sinal de igual é representado pelo seu código ASCII (decimal 61/hexadecimal 3D) ―=3D‖ O carácter ―ó‖ é representado pela sequência ―=F3‖ Exemplo: – Comiss=E3o Pedag=F3gica do DEETC ISEL-ADEETC-GRC 16 E-Mail – Correio Electrónico Grupo de Redes de Computadores Mail Transfer Agent SMTP (Simple Mail Transfer Protocol) SMTP SMTP Origem Destinatário LAN/WAN LAN/WAN INTERNET Servidor de Mail Servidor de Mail Tipicamente o MTA está à escuta no porto 25 sobre TCP ISEL-ADEETC-GRC 18 Comandos e Respostas Comandos MTA Cliente Respostas MTA Servidor Formato dos comandos Comando: Parâmetros ou Comando Formato das respostas XXX ―Descrição Textual‖ XXX = Código de Erro de 3 Dígitos ISEL-ADEETC-GRC 19 Comandos Comando Descrição HELO <domínio> Identificar o MTA cliente MAIL FROM: <origem> Identifica o remetente RCPT TO: <destino> Identifica o destinatário DATA Inicia a transmissão da mensagem QUIT Termina a sessão RSET Limpa o envelope no servidor NOOP Keep-alive da ligação HELP TURN Inverter o sentido da entrega ISEL-ADEETC-GRC 20 Respostas (1/2) Código Descrição Respostas positivas 211 Estado do sistema 214 Resposta ao comando HELP 220 Serviço pronto 250 Comando completo 251 O utilizador não é local, a mensagem vai ser encaminhada Respostas positivas intermédias 354 Iniciar o envio do e-mail Resposta negativa temporária 421 Serviço não disponível 450 Caixa de correio indisponível 451 Comando abortado: erro local ao processar 452 Espaço em disco insuficiente ISEL-ADEETC-GRC 21 Respostas (2/2) Código Descrição Respostas negativas finais 500 Erro de sintaxe, comando não reconhecido 501 Erro de sintaxe nos parâmetros ou argumentos 502 Comando não implementado 503 Sequência de comandos errada 504 Parâmetro do comando não implementado 550 Caixa de correio indisponível 551 O utilizador não é local 552 Foi excedido o espaço em disco disponível para a transacção 553 Nome da caixa de correio não permitido 554 A transacção falhou ISEL-ADEETC-GRC 22 Estabelecimento da ligação MTA Cliente MTA Servidor 220 smtp2.net.ipl.pt ESMTP Exim 4 IPLNet09 HELO pc1.net.local 250 smtp2.net.ipl.pt Hello net.ipl.pt [10.100.255.198] ISEL-ADEETC-GRC 23 Transferência das mensagens MTA Cliente MTA Servidor 250 OK RCPT TO: [email protected] ENVELOPE MAIL FROM: [email protected] 250 OK DATA From: Nuno Cruz <[email protected]> To: Teste <[email protected]> Date: Tue, 21 Apr 2009 22:12:10 +0100 CABEÇALHO 354 start mail input Subject: Teste 123 “Linha em branco” Isto é um teste. . CORPO Bom dia, 250 OK ISEL-ADEETC-GRC 24 Fecho da ligação MTA Cliente MTA Servidor QUIT 221 smtp2.net.ipl.pt closing connection ISEL-ADEETC-GRC 25 ESMTP O ESMTP adiciona novas funcionalidades ao SMTP Os clientes usam o EHLO para indicarem ao servidor que querem e suportam ESMTP (após o servidor anunciar suporte deste) Novas funcionalidades – – – – – – – – – – – 8BITMIME — Transmissão de dados a 8 bits, RFC 1652 ATRN — Inversão da entrega de correio electrónico autenticada, RFC 2645 SMTP-AUTH —SMTP autenticado, RFC 2554 CHUNKING — Permite a transferência de dados em binário, o cliente indica o tamanho à cabeça, RFC 3030 DSN — Notificação do estado da entrega, RFC 3461 ETRN — Turn expandido, RFC 1985 HELP — Ajuda, RFC 821 PIPELINING — Enviar mais que um comando por pacote, RFC 2920 SIZE — Declarar o tamanho da mensagem, RFC 1870 STARTTLS — Iniciar um canal cifrado, RFC 3207 (2002) UTF8SMTP — Permitir codificação em UTF-8 no nome das caixas de correio e cabeçalhos, RFC 5336 ISEL-ADEETC-GRC 26 E-Mail – Correio Electrónico Grupo de Redes de Computadores Message Access Agent Modelos de funcionamento Offline (POP3 - Post Office Protocol) – O cliente liga-se ao servidor e obtém todo o correio electrónico existente neste – Tudo é guardado no cliente Online (IMAP4 - Internet Message Access Protocol) – Cliente liga-se ao servidor – Todos os e-mails são mantidos no servidor Disconnected (IMAP4) – O cliente está síncrono com o servidor – O servidor é quem tem a autoridade sobre os e-mails ISEL-ADEETC-GRC 28 POP3 e IMAP4 SMTP SMTP POP/IMAP Origem Destinatário LAN/WAN LAN/WAN INTERNET Servidor de Mail Servidor de Mail Tipicamente o MAA está à escuta no porto 110 (POP3) ou 143 (IMAP4) ISEL-ADEETC-GRC 29 POP3 MAA/POP3 Cliente O comando LIST obtém o tamanho em bytes de uma mensagem individual, se não indicarmos a mensagem obtém de todas. MAA/POP3 Servidor +OK IPLNet IMAP/POP ready. <3d07.1cb.4RQ==@ribble> USER [email protected] +OK Enviar o utilizador PASS 123xpto456 +OK Enviar a password STAT +OK 3 1500 LIST 2 +OK 2 500 DELE 2 +OK 2 O comando STAT obtém o numero de mensagens e o tamanho destas em bytes Apaga as mensagens QUIT +OK ISEL-ADEETC-GRC Terminar a sessão 30 Comandos USER name PASS password APOP name digest - (opcional) STAT - saber quantas mensagens que existem e tamanho total LIST - saber o tamanho de cada mensagem existentes RETR msg - Ler uma mensagem DELE msg - Apagar uma mensagem RSET <CRLF> NOOP <CRLF> QUIT <CRLF> TOP msg lines <CRLF> UIDL ISEL-ADEETC-GRC 31 IMAP Permite dividir o email por pastas Diferentes modos de operação Próximo do POP em termos de funcionamento Lista muito extensa de comandos Mais complexo que o POP ISEL-ADEETC-GRC 32 IMAP – Exemplo 1/3 * OK IPLNet IMAP/POP ready. Obtém as capacidades do servidor 1 capability * CAPABILITY IMAP4rev1 SORT IDLE CHILDREN QUOTA STARTTLS D AUTH=CRAM-MD5 1 OK Capability completed. 2 authenticate CRAM-MD5 + OTcyMzU2TI0Mjk5OTc0OEByaWJibGU+ Autenticação segura cHJpYmVpcm9AbmV0LmAMDhkNjI2NmY2NDdkN2RkNzM3NzhiZg== 2 OK Logged in. Lista as pastas subscritas no servidor 3 lsub "" "*" * LSUB () "/" "INBOX" * LSUB () "/" "Drafts" * LSUB () "/" "Sent" * LSUB () "/" "ISEL" * LSUB () "/" "DEETC― * LSUB () "/" "Junk― 3 OK Lsub completed. Legenda: Respostas do servidor Comandos do cliente ISEL-ADEETC-GRC 33 IMAP – Exemplo 2/3 Selecciona a pasta ―INBOX‖ 5 select "INBOX" * FLAGS (\Answered \Flagged \Deleted \Seen \Draft $Forwarded Junk NonJunk) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft $Forwarded Junk NonJunk \*)] Flags permitted. * 22 EXISTS * 0 RECENT * OK [UIDVALIDITY 1193263575] UIDs valid * OK [UIDNEXT 24658] Predicted next UID 5 OK [READ-WRITE] Select completed. 6 getquotaroot "INBOX" Obtém o estado de ocupação em disco da * QUOTAROOT "INBOX" "User quota" pasta * QUOTA "User quota" (STORAGE 3756841 5120000) 6 OK Getquotaroot completed. 7 UID fetch 1:* (FLAGS) Obter as FLAGS para todas as mensagens * 1 FETCH (UID 24084 FLAGS (\Flagged \Seen)) INBOX * 2 FETCH (UID 24356 FLAGS (\Flagged \Seen)) * 3 FETCH (UID 24358 FLAGS (\Flagged \Seen)) * 4 FETCH (UID 24380 FLAGS (\Seen)) * 5 FETCH (UID 24390 FLAGS (\Answered \Flagged \Seen NonJunk)) * 6 FETCH (UID 24421 FLAGS (\Flagged \Seen NonJunk)) 7 OK Fetch completed. Legenda: Respostas do servidor Comandos do cliente ISEL-ADEETC-GRC 34 na IMAP – Exemplo 3/3 Impedir que a ligação feche por inactividade 8 IDLE + idling DONE 8 OK Idle completed. Obter a mensagem com o identificador 9 UID fetch 24653 (UID RFC822.SIZE BODY.PEEK[]) 24653 * 21 FETCH (UID 24653 RFC822.SIZE 1275 BODY[] {1275} Date: Fri, 22 May 2009 10:25:02 GMT To: [email protected] From: [email protected] Subject: Set Daylight Saving Time. Content-Type: text/plain; charset=iso-8859-1 Mensagem Name : AP7952-PSW2-IPLNet Location : Datacenter IPL campus ISEL - Bastidor 6H Contact : Pedro Ribeiro / Nuno Cruz System: Set Daylight Saving Time. Desligar a sessão 9 OK Fetch completed. 10 logout * BYE Logging out 10 OK Logout completed. ISEL-ADEETC-GRC Legenda: Respostas do servidor Comandos do cliente 35 SIEVE Linguagem usada para criar filtros de correio electrónico – Os filtros são executados directamente pelo MDA durante a entrega do correio Define também o protocolo (ManageSieve) usado para transporte dos scripts de SIEVE O script é enviado para o servidor através de uma ligação TCP no porto 2000 O ManageSieve ainda está em draft (draft-ietf-sieve-managesieve09 de 17 de Janeiro de 2009) ISEL-ADEETC-GRC 36 SIEVE - Exemplo de um script # example script require ["fileinto", "reject"]; # Messages bigger than 100K will be rejected with an error message if size :over 100K { reject "I'm sorry, I do not accept mail over 100kb in size. Please upload larger files to a server and send me a link. Thanks."; } # Mails from a mailing list will be put into the folder "mailinglist" elsif address :is ["From", "To"] "[email protected]" { fileinto "INBOX.mailinglist"; } ISEL-ADEETC-GRC 37 Sumário Princípios de funcionamento do email Protocolo SMTP Protocolo POP3 e IMAP Filtros SIEVE Slides realizados pelo docente Nuno Cruz em 03/2012 ISEL-ADEETC-GRC 38