SMTP Simple Mail Transfer Protocol SMTP • Simple Mail Transfer Protocol • Base del transporte de correo electrónico. Ya no es más el sistema de mensajería más utilizado. • 1981. SMTP fue ideado para entrega de correo electrónico entre máquinas con capacidad SMTP en Internet. • La idea principal era permitir la transferencia sin que el receptor estuviera presente. Se hablaba de una transmisión retardada: Tx en cualquier momento, Rx por decisión => Desacople entre ambos procesos. • Inicialmente la máquina transmisora debía indicar la ruta para la entrega. Hoy se basa en DNS. • Inicialmente sólo se transferían mensajes de texto. Hoy se pueden transferir todo tipo de mensajes y archivos. Topología básica . Message Transfer Agent Message Transfer Agent User Agent User Agent User Agent Topología . MTA mail.mi-servidor.com.ar MTA mail.otro-servidor-remoto.com.ar SMTP (TCP) mail.servidor-remoto.com.ar SMTP (TCP) MTA POP3 IMAP4 (TCP) [email protected] •Eudora •The Bat! •Thunderbird •Outlook •… Cliente Telnet UA POP3 IMAP4 (TCP) •Sendmail •Postfix •Qmail •… UA [email protected] UA [email protected] SMTP – Proceso de comunicación – Entrega indirecta 1. Crear mensaje (Formato RFC 822 + MIME). El mensaje: header (descriptivo del mensaje, controla procesamiento y entrega)+ body (el mensaje propiamente dicho). 2. Enviar el mensaje al Servidor SMTP local (Protocolo SMTP, RFC 821). 3. Entregar mensaje . Sistema SMTP local del Tx realiza una consulta al servicio DNS para hallar el registro MX del sitio de entrega de mail. Conexión SMTP sobre TCP entre Servidor Local y Servidor remoto. Puerto 25. 4. Recepción y procesamiento del mensaje. El Servidor del sitio receptor coloca el mail en un buzón del destinatario, a la espera de que éste lo lea. 5. Acceso y Recuperación. El destinatario muestrea su buzón a demanda, mediante protocolo POP/IMAP que le permite mirar encabezados y remitentes antes de abrir los mensajes. • SMTP para transporte y entrega. POP para acceso al buzón. SMTP – Direcciones de e-mail • Comunicación orientada al usuario. No es del tipo (Dir IP:Nº de puerto), sino del tipo (Who: Where). • <username>@<domainname>. Es un esquema menos restrictivo, con sintaxis DNS. Debe ser genérico y representativo, no un Servidor o una máquina, ya que un sitio puede contar con más de un Servidor por asuntos de balance de carga. • El registro MX de DNS permite especificar el Servidor de Correo de un dominio. • De este modo no se usan relays intermedios. • El sistema permite usar alias, armar agendas de direcciones y crear listas especificando múltiples receptores. Formato de Mensajes – RFC 822 y MIME • Los mensajes RFC 822 tienen un formato bien definido. • • • Se trata de líneas de texto ASCII que se usan inclusive para los encabezados. Cada línea finaliza con CRLF. Cada línea debería ser de 78 caracteres o menos y no debe superar los 998 caracteres. Los caracteres CR y LF no deben aparecer en el texto. • Los mensajes comienzan con un conjunto de líneas que conforman el encabezado. Se compone de headers, expresados en el formato <header name>: <header value>. Este formato hace que los mensajes sean explicativos casi por sí mismos. Luego de los encabezados aparece una línea en blanco (dos caracteres CRLF consecutivos). Es un indicador del comienzo del cuerpo del mensaje. El cuerpo del mensaje también consta de líneas de caracteres ASCII con los límites previamente mencionados. Todo es muy sencillo pero limitado a texto en inglés. Por eso surgió MIME • • • Formato de Mensajes – Grupos de encabezados • Campo de Fecha de Origen. Date: • Campos de Originador. From: dirección, Sender: nombre, dirección • Campos de Dirección Destino. To: Cc: Bcc: • Campos de Identificación. References: otros mensajes. • Campos de Información. Subject: Comments: Keywords: Message-ID: In-Replay-To: Replay-To: message-ID • Campos de Re-envío. Resent-Date: Resent-From: Resent-Sender:Resent-To: Resent-Cc: Resent-Bcc: Resent-Message-ID: • Campos de Traza. Received: Return-Path: Formato de Mensajes • • • El estándar define un objeto de correo: mensaje + sobre. El sobre contiene toda la información para transporte. El mensaje es lo que hemos visto hasta ahora: encabezados y cuerpo. • SMTP sólo mira el sobre cuando debe decidir cómo enviar un mensaje. • No es lo mismo el sobre que los encabezados del mensaje. El sofware que procesa e interpreta el mensaje, puede construir el sobre para transporte de SMTP. envelope header body Formato de Mensajes - MIME • • RFC 822 no provee flaxibilidad para soporte de información multimedia o archivos arbitrarios o idiomas diferentes. Multipurpose Internet Mail Extensions (MIME) fue creado por ese motivo. • MIME define hasta una estructura que permite codificar múltiples archivos diferentes en un único mensaje de correo. • Usa reglas de codificación especiales que transforman un archivo noASCII a formato ASCII. • Se agregan headers al mensaje. Los headers indica la forma de codificación utilizada. El programa de presentación de mail debe tener soporte MIME. RFC 2045 a RFC 2049. Premisa 1: Cuerpo de mensaje RFC 822 puede cargar cualquier tipo de texto ASCII respetando la limitación de 998 caracteres y fin “CRLF”. Premisa 2: RFC 822 facilita la creación de headers del tipo “user-defined”. • • • • Formato de Mensajes - MIME • Tipos de Estructuras Básicas Estructura Simple (Discrete Media): por ejemplo texto o imágenes, sólo llevan un tipo de codificación simple. Estructura Compleja (Composite Media): varios tipos de mezclados, el mensaje contiene varias partes MIME. • Entidades MIME Tanto los mensajes MIME completos como sus partes individuales se denominan entidades MIME. Cada conjunto de encabezados MIME provee información sobre la entidad, ya sea el mensaje completo o cada una de sus partes si es compuesto. En la recepción, primero se analizan los del todo, que indican si la estructura es simple o compleja. En el último caso, se procede a analizar las partes componentes. Formato de Mensajes – Headers MIME Primarios • MIME-Version, por ahora 1.0. Quiere decir mensaje codificado en MIME • Content-Type, describe la naturaleza de los datos de la entidad, especificando tipo y subtipo. En el cuerpo del mensaje, le dice al receptor qué clase de medios contiene y si es estructura simple o compleja. Por ejemplo: “multipart/mixed” or “multipart/alternative”. En una parte del cuerpo, la describe. Por ejemplo: “text/html”, “image/jpeg”. Es opcional, si no estuviera presente se asume US-ASCII RFC 822. • Content-Transfer-Encoding, puede referirse al todo o a cada una de sus partes. Es opcional y su default es US- ASCII. • Content-ID, código de referencia, opcional. • Content-Description, opcional, texto descriptivo. Formato de Mensajes – Headers MIME Adicionales • Content-Disposition, en MIME multiparte se puede especificar en cada parte cómo presentar la información al usuario. Por ejemplo: “inline” (presentación automática junto con el resto de las partes) o “attachment” (separado del documento principal). • Content-Location, permite identificar localización con URI, por ejemplo cuando se habilita codificación HTML. • Content-Length, en bytes. Importante en HTTP. Content –Type y Medios Discretos • • • • • • • • La sintaxis de Content-Type es <type>/<subtype> [; parameter1 ; parameter2 .. ; parameterN ] La descripción va de lo general a lo específico. “<type>” y “<subtype>” son obligatorios. Los parámetros son opcionales y ofrecen una descripción aún más detallada del tipo attribute=value Por ejemplo: Content-type: text/plain; charset=“us-ascii” Content-type: image/jpeg; name=“ryanpicture.jpg” text/plain; text/enriched; text/html; text/css; image/jpeg; image/gif; image/tiff; image/vnd.dwg; image/vnd.dxf; image/vnd.svf audio/basic; audio/mpeg video/mpeg; video/dv; video/quicktime application/octet-stream; application/postscript; application/applefile; application/msword; application/pdf; application/vnd.lotus-1-2-3; application/vnd.ms-excel; application/vnd.ms-powerpoint; application/vnd.msproject; application/zip Medios Compuestos tipo Multipart • • • • Multipart Media Type (multipart): Uno o más conjuntos de datos dentro de un mensaje MIME. Cada uno se representa por un tipo discreto. Message Media Type (message): Permite que un mensaje encapsule a otro, que puede ser otro e-mail. Subtipos Multipart Message: multipart/mixed (no relacionados pero en el mismo mensaje); multipart/alternative (representaciones alternativas); multipart/parallel (mostrar al mismo tiempo); multipart/digest (apéndices); multipart/related; multipart/encrypted. Multipart Message Encoding Cada parte individual se procesa como si fuese a ser transmitida como el cuerpo de un tipo de mensaje MIME discreto. Esto incluye la especificación de Content-Type, Content-ID y Content-Transfer-Encoding. Para separar las partes, se utiliza un delimitador especial (string aleatorio que comienza con “--”. Luego se ensambla el mensaje: preámbulo texto/ línea delimitadora/ primera parte/ línea delimitadora/…./ última parte/ línea delimitadora/ texto final. Medios Compuestos tipo Multipart From: Joe Sender <[email protected]> To: Jane Receiver <[email protected]> Date: Sun, 1 Jun 2003 13:28:19 —0800 Subject: Photo and discussion MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="exampledelimtext123" This is a multipart message in MIME format —exampledelimtext123 Content-Type: text/plain Jane, here is the photo you wanted me for the new client. Here are some notes on how it was processed. (Blah blah blah…) Talk to you soon, Joe. —exampledelimtext123 Content-Type: image/jpeg; name="clientphoto.jpg" Content-Transfer-Encoding: base64 SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs • … zv/wAARCADIARoDASIAAhEBAxEB/8QAHAAAAQUBA —exampledelimtext123 (Epilogue) Medios Compuestos tipo Mensaje Encapsulado • También tiene subtipos: message/rfc822: Encapsula un mail con formato RFC 822. Podría ser un mensaje MIME. message/partial: Permite fragmentar mensajes largos que luego pueden reensamblarse. message/external-body: Provee una referencia para la localización del cuerpo del mensaje. Content--Transfer Content Transfer--Encoding • Restricciones RFC 822: Codificación US ASCII (representación en 7 bits), Límite de línea 1000 caracteres incluyendo “CRLF”. • Genera problemas para datos binarios: video, archivo mp3, ejecutables, etc. => Métodos de Codificación MIME => Header Content-Transfer-Encoding. • 7bit: Compatible ASCII RFC 822. Es el default que se asume cuando no está el header. • 8bit / binary: RFC 1652 con extensión SMTP para 8bit-MIMEtransport. • quoted-printable: Cuando la mayoría de los datos son texto ASCII, pero existen violaciones a las reglas RFC 822 (por ejemplo acentos), para que sea consistente con RFC 822. • base64: Para datos binarios, se codifican en fomato ASCII. Content--Transfer Content Transfer--Encoding – base 64 6-bit Value Encoding 6-bit Value Encoding 6-bit Value Encoding 6-bit Value Encoding 0 A 16 Q 32 g 48 w 1 B 17 R 33 h 49 x 2 C 18 S 34 i 50 y 3 D 19 T 35 j 51 z 4 E 20 U 36 k 52 0 5 F 21 V 37 l 53 1 6 G 22 W 38 m 54 2 7 H 23 X 39 n 55 3 8 I 24 Y 40 o 56 4 9 J 25 Z 41 p 57 5 10 K 26 a 42 q 58 6 11 L 27 b 43 r 59 7 12 M 28 c 44 s 60 8 13 N 29 d 45 t 61 9 14 O 30 e 46 u 62 + 15 P 31 f 47 v 63 / 3 bytes -> 4 palabras de 6 bits ->tabla => 4 char ASCII Extensiones MIME para Headers no ASCII • Por ejemplo para Subject en lenguaje distinto del inglés. • • • • • El header normal se reemplaza por una palabra =?<charset>?<encoding>?<encoded-text>?= “=?” y “?=” encierran el header non-ASCII e indican la codificación. <charset>: por ejemplo “iso-8859-1”. <encoding>: “B” es base64 y “Q” quoted-printable. <encoded-text>: es el texto codificado. • Por ejemplo: Subject: codificada: =?UTF-8?Q?aprobaci=C3=B3n=20de=20edici=C3=B3n?= SMTP – Proceso de comunicación SMTP - Transacción Sesión SMTP Al estar montado sobre una conexión TCP al puerto 25, se inicia con three-way handshake 220 mail.mi-servidor.com.ar (E)SMTP (Sendmail/Postfix/etc. 4-oct) >>> HELO mi-maquina (EHLO) 250 mail.mi-servidor.com.ar HELLO mi-maquina >>> MAIL From: <[email protected]> 250 … Sender ok >>> RCPT To: <[email protected]> 250 … Recipient ok >>> DATA 354 Enter data; end with “.” (<CR><LF>. <CR><LF>) >>> Message body … (aca van la cabecera y los datos!)… 250 ok Mail accepted >>> QUIT 221 Ok Bye se cierra la conexión TCP en ambas direcciones SMTP – Cliente y Servidor • Servidor códigos numéricos de 3 cifras • se inician con cifras del 1 (obsoleto) al 5: abc • a=2: ok! • a=3: vamos bien, pero faltan cosas • a=4: falla temporal recuperable • a=5: error critico • Cliente comandos de 4 letras • los más comunes son 5 • MAIL, RCPT, DATA, QUIT, HELO, EHLO • Otros: TURN, RSET, VRFY, EXPN, AUTH, SIZE TURN: intercambia roles C y S, sin caer la conexión TCP RSET: aborta el mail en curso, y borra toda info almacenada NOOP: solo fuerza al mail server a contestar con Ok (200) VRFY: el cliente consulta al server la existencia del destinatario, SIN mandar mensaje AUTH, SIZE son extensiones • • • • • ESMTP • Cambios en envelope: Extensiones sobre SMTP (ESMTP, extended…) • La sesión se inicia con EHLO (a diferencia del HELO), si el MTA me invitó con ESMTP • El MTA responde 250 (Ok) y envía su conjunto de extensiones • 250-PIPELINING • 250-SIZE xxxxxxxx • 250-VRFY • 250-ETRN • 250-AUTH • 250-ENHANCEDSTATUSCODES • 250-8BITMIME • 250-DSN • 250-XADR • 250-STARTLS • 250-DELIVERBY • 250-EXPN • 250 HELP Extensiones SMTP => ESMTP PIPELINING = reduce el tiempo de enviar varios mensajes, al no esperar confirmaciones a comandos uno a uno (p.ej. si la red está lenta) SIZE xxxxxxxx = tamaño del mensaje que soporta el server. O lo especifica el server, o lo manifiesta el cliente previo al envío. AUTH (authentication) LOGIN => Username - Ok (250)/Password - Ok (250); (codif. base64) CRAM-MD5 => encripta username y password (Eudora) PLAIN => “0username0password” – Ok (250); (codif. base64) DSN (delivery status notification) failed / delayed / succesfull / relayed CHECKPOINT (RESTART) = puntero por posible interrupción; retoma la transferencia desde el punto marcado por el corte. ETRN (extended TURN- QSND) permite que un mail server solicite a otro/s el envío de mails. Se suele aplicar cuando un host no está conectado permanentemente. ENHANCEDSTATUSCODES (codificación numérica del mailserver, con mas opciones. Se mantiene el formato de 3 cifras; RFC 1893) 8BITMIME (usa 8 bits p/byte, lo cual permite interpretar MIME) STARTTLS (transport layer security) conexión segura / (vers. 1.1) DELIVERBY (enviar dentro de los nn seg.); “Mail From: <[email protected]> BY=600” POP3 - Post Office Protocol, versión 3 • SMTP se encarga del envío de e-mail hasta el buzón del receptor. • La recuperación del mensaje desde el buzón a la máquina del cliente se realiza con otros protocolos. • Post Office Protocol (POP) e Internet Message Access Protocol (IMAP). • POP es el más popular. Se basa en un modelo de acceso offline para recuperar correo del servidor SMTP. Es muy sencillo, de pocos comandos, su versión actual es la 3, de ahí su nombre POP3. • POP3: Modelo C-S; C: Eudora, Microsoft Outlook, etc; S: puerto 110. Conexión TCP. Comandos C->S texto ASCII finaliza con CRLF. Respuestas S->C: +OK/-ERR. Máquina de Estados. POP3 - Autorización POP3 - Transacción STAT Requerimiento de información de estado de buzón (Número de mensajes, y bytes de cada mensaje) LIST Lista información sobre los mensajes en el buzón (Número de mensaje y tamaño) RETR Para bajar un mensaje del buzón. DELE Marca un mensaje para borrar, luego LIST o RETR darían error. NOOP RSET TOP Para obtener sólo encabezados y las primeras N líneas especificadas. POP3 Internet Message Access Protocol (IMAP4) Con POP3 la lectura de los mensajes se realiza luego de su recuperación, en la máquina del C. IMAP provee mayor funcionalidad. IMAP4 se basa en el modelo C-S. El S debe encontrarse en el mismo S donde se alojan los buzones. IMAP4 usa TCP. El servidor escucha en el puerto 143. IMAP – Códigos Resultado OK: Resultado positivo, usualmente se acompaña de la etiqueta del comando. NO: Resultado negativo, si no se etiqueta se debe interpretar como mensaje de advertencia sobre alguna situación en el servidor. BAD: Indica mensaje de error. PREAUTH: Mensaje no etiquetado que se envía al comienzo de una sesión para indicar que no es necesario autenticarse. BYE: Servidor a punto de cerrar la sesión, en respuesta al comando para logout. IMAP – Códigos Respuesta ALERT: Información a C sobre algo importante. BADCHARSET: Conjunto de caracteres no soportado. CAPABILITY: Listado. PARSE: Error durante la separación de headers o contenido MIME. PERMANENTFLAGS: Lista de banderas de estado de mensajes, que el C puede manipular. READ-ONLY: Modo de acceso a buzón. READ-WRITE: Modo de acceso a buzón. TRYCREATE: Cuando comandos APPEND o COPY fallan por inexistencia de buzón. UIDNEXT: Enviado con un número que especifica el siguien¡ente ID a usar en una operación. UIDVALIDITY: Usado para confirmar el ID. UNSEEN: Enviado con número que le dice al C el mensaje marcado como no leído. IMAP – Comandos No Autenticado Command LOGIN AUTHENTICATE STARTTLS Parameters User name and password Authentication mechanism name None IMAP – Comandos Autenticado SELECT Mailbox name Si existoso, transición a SELECTED EXAMINE Mailbox name Buzón se abre en modo read-only. CREATE DELETE RENAME LIST Mailbox name Mailbox name Current and new mailbox names Mailbox name or reference string STATUS Mailbox name APPEND Mailbox name, message, optional flags and date/time IMAP – Comandos Seleccionado Command Parameters CHECK None CLOSE None Cierra el buzón actual y retorna al estado AUTENTICADO. EXPUNGE None Remueve mensajes marcados para borrar. Automático al cierre. SEARCH FETCH STORE COPY UID Description Establece un “checkpoint” para un buzón. Search criteria and an optional En el buzón actual. character set specification Para leer un número específico de Sequence of message numbers elementos de un mensaje o una and a list of message data items secuencia de mensajes. Por ejemplo encabezados, cuerpos, (or a macro) flags, fechas, etc. Sequence of message numbers, Es el complemento de FETCH para message data item name and realizar cambios a un mensaje, value sobre todo las banderas. Sequence of message numbers and a mailbox name Command name and arguments