Diferencia entre revisiones de «SMTP»

Línea 1: Línea 1:
{{Aplicación|nombre=SMTP|logo=|descripcion=|creador=|fecha_de_creacion=|sitio_web=}}
+
{{Aplicación|nombre=SMTP|logo=|descripcion=|creador=|fecha_de_creacion=|sitio_web=}}{{Mejorar}} '''SMTP''' ('''Simple Mail Transfer Protocol''') Protocolo Simple de Transferencia de [[Correo]], es un protocolo de la [[Capa de aplicación]]. [[Protocolo de red]] basado en texto utilizado para el intercambio de mensajes de [[Correo electrónico]] entre [[Computadoras]] u otros dispositivos ([[PDA]]'s, [[Teléfonos móviles]], etc.). Está definido en el [[RFC 2821]] y es un estándar oficial de Internet.  
'''SMTP''' ('''Simple Mail Transfer Protocol''') Protocolo Simple de Transferencia de [[Correo]], es un protocolo de la [[capa de aplicación]]. [[Protocolo de red]] basado en texto utilizado para el intercambio de mensajes de [[correo electrónico]] entre [[computadoras]] u otros dispositivos ([[PDA]]'s, [[teléfonos móviles]], etc.). Está definido en el [[RFC 2821]] y es un estándar oficial de Internet.
 
  
== Historia ==
+
== Historia ==
  
En [[1982]] se diseñó el primer sistema para intercambiar correos electrónicos en [[ARPANET]], definido en los ''Request for comments'' RFC 821 y RFC 822. La primera de ellas define este protocolo y la segunda el formato del mensaje que este protocolo debía transportar.
+
En [[1982]] se diseñó el primer sistema para intercambiar correos electrónicos en [[ARPANET]], definido en los ''Request for comments'' RFC 821 y RFC 822. La primera de ellas define este protocolo y la segunda el formato del mensaje que este protocolo debía transportar.  
  
Con el tiempo se ha convertido en uno de los protocolos más usados en [[internet]]. Para adaptarse a las nuevas necesidades surgidas por el crecimiento y popularidad de internet se han hecho varias ampliaciones a este protocolo, como poder enviar texto con formato.
+
Con el tiempo se ha convertido en uno de los protocolos más usados en [[Internet]]. Para adaptarse a las nuevas necesidades surgidas por el crecimiento y popularidad de internet se han hecho varias ampliaciones a este protocolo, como poder enviar texto con formato.  
  
== Funcionamiento ==
+
== Funcionamiento ==
  
SMTP se basa en el modelo [[cliente-servidor]], donde un cliente envía un mensaje a uno o varios receptores. La comunicación entre el cliente y el servidor consiste enteramente en líneas de texto compuestas por caracteres [[ASCII]]. El tamaño máximo permitido para estas líneas es de 1000 caracteres.
+
SMTP se basa en el modelo [[Cliente-servidor]], donde un cliente envía un mensaje a uno o varios receptores. La comunicación entre el cliente y el servidor consiste enteramente en líneas de texto compuestas por caracteres [[ASCII]]. El tamaño máximo permitido para estas líneas es de 1000 caracteres.  
  
Las respuestas del servidor constan de un código numérico de tres digitos, seguido de un texto explicativo. El número va dirigido a un procesado automático de la respuesta por autómata, mientras que el texto permite que un humano interprete la respuesta.
+
Las respuestas del servidor constan de un código numérico de tres digitos, seguido de un texto explicativo. El número va dirigido a un procesado automático de la respuesta por autómata, mientras que el texto permite que un humano interprete la respuesta. En el protocolo SMTP todas las órdenes, réplicas o datos son líneas de texto, delimitadas por el carácter <CRLF>. Todas las réplicas tienen un código numérico al comienzo de la línea.  
En el protocolo SMTP todas las órdenes, réplicas o datos son líneas de texto, delimitadas por el carácter <CRLF>. Todas las réplicas tienen un código numérico al comienzo de la línea.
 
  
En el conjunto de protocolos [[TCP/IP]], el SMTP va por encima del [[TCP]], usando normalmente el puerto 25 en el servidor para establecer la conexión.
+
En el conjunto de protocolos [[TCP/IP]], el SMTP va por encima del [[TCP]], usando normalmente el puerto 25 en el servidor para establecer la conexión.  
  
=== Resumen simple del funcionamiento del protocolo SMTP ===
+
=== Resumen simple del funcionamiento del protocolo SMTP ===
  
* Cuando un cliente establece una conexión con el servidor SMTP, espera a que éste envíe un mensaje '''“220 Service ready”''' o '''“421 Service non available”'''
+
*Cuando un cliente establece una conexión con el servidor SMTP, espera a que éste envíe un mensaje '''“220 Service ready”''' o '''“421 Service non available”'''
  
* Se envía un '''HELO''' desde el cliente. Con ello el servidor se identifica. Esto puede usarse para comprobar si se conectó con el servidor SMTP correcto.
+
*Se envía un '''HELO''' desde el cliente. Con ello el servidor se identifica. Esto puede usarse para comprobar si se conectó con el servidor SMTP correcto.
  
* El cliente comienza la transacción del correo con la orden '''MAIL FROM'''. Como argumento de esta orden se puede pasar la dirección de correo al que el servidor notificará cualquier fallo en el envío del correo (Por ejemplo, '''MAIL FROM:<fuente@host0>'''). Luego si el servidor comprueba que el origen es valido, el servidor responde '''“250 OK”'''.
+
*El cliente comienza la transacción del correo con la orden '''MAIL FROM'''. Como argumento de esta orden se puede pasar la dirección de correo al que el servidor notificará cualquier fallo en el envío del correo (Por ejemplo, '''MAIL FROM:&lt;fuente@host0&gt;'''). Luego si el servidor comprueba que el origen es valido, el servidor responde '''“250 OK”'''.
  
* Ya le hemos dicho al servidor que queremos mandar un correo, ahora hay que comunicarle a quien. La orden para esto es '''RCPT TO:<destino@host>'''. Se pueden mandar tantas órdenes RCPT como destinatarios del correo queramos. Por cada destinatario, el servidor contestará '''“250 OK”''' o bien '''“550 No such user here”''', si no encuentra al destinatario.
+
*Ya le hemos dicho al servidor que queremos mandar un correo, ahora hay que comunicarle a quien. La orden para esto es '''RCPT TO:&lt;destino@host&gt;'''. Se pueden mandar tantas órdenes RCPT como destinatarios del correo queramos. Por cada destinatario, el servidor contestará '''“250 OK”''' o bien '''“550 No such user here”''', si no encuentra al destinatario.
  
* Una vez enviados todos los RCPT, el cliente envía una orden '''DATA''' para indicar que a continuación se envían los contenidos del mensaje. El servidor responde '''“354 Start mail input, end with <CRLF>.<CRLF>”''' Esto indica al cliente como ha de notificar el fin del mensaje.
+
*Una vez enviados todos los RCPT, el cliente envía una orden '''DATA''' para indicar que a continuación se envían los contenidos del mensaje. El servidor responde '''“354 Start mail input, end with &lt;CRLF&gt;.&lt;CRLF&gt;”''' Esto indica al cliente como ha de notificar el fin del mensaje.
  
* Ahora el cliente envía el cuerpo del mensaje, línea a línea. Una vez finalizado, se termina con un <CRLF>.<CRLF> (la última línea será un punto), a lo que el servidor contestará '''“250 OK”''', o un mensaje de error apropiado.
+
*Ahora el cliente envía el cuerpo del mensaje, línea a línea. Una vez finalizado, se termina con un &lt;CRLF&gt;.&lt;CRLF&gt; (la última línea será un punto), a lo que el servidor contestará '''“250 OK”''', o un mensaje de error apropiado.
  
* Tras el envío, el cliente, si no tiene que enviar más correos, con la orden '''QUIT''' corta la conexión. También puede usar la orden '''TURN''', con lo que el cliente pasa a ser el servidor, y el servidor se convierte en cliente. Finalmente, si tiene más mensajes que enviar, repite el proceso hasta completarlos.
+
*Tras el envío, el cliente, si no tiene que enviar más correos, con la orden '''QUIT''' corta la conexión. También puede usar la orden '''TURN''', con lo que el cliente pasa a ser el servidor, y el servidor se convierte en cliente. Finalmente, si tiene más mensajes que enviar, repite el proceso hasta completarlos.
  
Puede que el servidor SMTP soporte las extensiones definidas en el RFC 1651, en este caso, la orden HELO puede ser sustituida por la orden EHLO, con lo que el servidor contestará con una lista de las extensiones admitidas. Si el servidor no soporta las extensiones, contestará con un mensaje "500 Syntax error, command unrecognized".
+
Puede que el servidor SMTP soporte las extensiones definidas en el RFC 1651, en este caso, la orden HELO puede ser sustituida por la orden EHLO, con lo que el servidor contestará con una lista de las extensiones admitidas. Si el servidor no soporta las extensiones, contestará con un mensaje "500 Syntax error, command unrecognized".  
  
En el ejemplo pueden verse las órdenes básicas de SMTP:
+
En el ejemplo pueden verse las órdenes básicas de SMTP:  
  
* HELO, para abrir una sesión con el servidor
+
*HELO, para abrir una sesión con el servidor  
* MAIL FROM, para indicar quien envía el mensaje
+
*MAIL FROM, para indicar quien envía el mensaje  
* RCPT TO, para indicar el destinatario del mensaje
+
*RCPT TO, para indicar el destinatario del mensaje  
* DATA, para indicar el comienzo del mensaje, éste finalizará cuando haya una línea únicamente con un punto.
+
*DATA, para indicar el comienzo del mensaje, éste finalizará cuando haya una línea únicamente con un punto.  
* QUIT, para cerrar la sesión
+
*QUIT, para cerrar la sesión  
* RSET Aborta la transacción en curso y borra todos los registros.
+
*RSET Aborta la transacción en curso y borra todos los registros.  
* SEND Inicia una transacción en la cual el mensaje se entrega a una terminal.
+
*SEND Inicia una transacción en la cual el mensaje se entrega a una terminal.  
* SOML El mensaje se entrega a un terminal o a un buzon.
+
*SOML El mensaje se entrega a un terminal o a un buzon.  
* SAML El mensaje se entrega a un terminal y a un buzon.
+
*SAML El mensaje se entrega a un terminal y a un buzon.  
* VRFY Solicita al servidor la verificación del argumento.
+
*VRFY Solicita al servidor la verificación del argumento.  
* EXPN Solicita al servidor la confirmación del argumento.
+
*EXPN Solicita al servidor la confirmación del argumento.  
* HELP Permite solicitar información sobre un comando.
+
*HELP Permite solicitar información sobre un comando.  
* NOOP Se emplea para reiniciar los temporizadores.
+
*NOOP Se emplea para reiniciar los temporizadores.  
* TURN Solicita al servidor que intercambien los paquetes.
+
*TURN Solicita al servidor que intercambien los paquetes.
  
De los tres dígitos del código numérico, el primero indica la categoría de la respuesta, estando definidas las siguientes categorías:
+
De los tres dígitos del código numérico, el primero indica la categoría de la respuesta, estando definidas las siguientes categorías:  
  
* 2XX, la operación solicitada mediante el comando anterior ha sido concluida con éxito
+
*2XX, la operación solicitada mediante el comando anterior ha sido concluida con éxito  
* 3XX, la orden ha sido aceptada, pero el servidor esta pendiente de que el cliente le envíe nuevos datos para terminar la operación
+
*3XX, la orden ha sido aceptada, pero el servidor esta pendiente de que el cliente le envíe nuevos datos para terminar la operación  
* 4XX, para una respuesta de error, pero se espera a que se repita la instrucción
+
*4XX, para una respuesta de error, pero se espera a que se repita la instrucción  
* 5XX, para indicar una condición de error permanente, por lo que no debe repetirse la orden
+
*5XX, para indicar una condición de error permanente, por lo que no debe repetirse la orden
  
Una vez que el servidor recibe el mensaje finalizado con un punto puede almacenarlo si es para un destinatario que pertenece a su [[Dominio de Internet|dominio]], o bien retransmitirlo a otro servidor para que finalmente llegue a un servidor del dominio del receptor.
+
Una vez que el servidor recibe el mensaje finalizado con un punto puede almacenarlo si es para un destinatario que pertenece a su [[Dominio de Internet|dominio]], o bien retransmitirlo a otro servidor para que finalmente llegue a un servidor del dominio del receptor.  
  
=== Ejemplo de una comunicación SMTP ===
+
=== Ejemplo de una comunicación SMTP ===
  
En primer lugar se ha de establecer una conexión entre el emisor (cliente) y el receptor (servidor). Esto puede hacerse automáticamente con un programa cliente de correo o mediante un cliente [[telnet]].
+
En primer lugar se ha de establecer una conexión entre el emisor (cliente) y el receptor (servidor). Esto puede hacerse automáticamente con un programa cliente de correo o mediante un cliente [[Telnet]].  
  
En el siguiente ejemplo se muestra una conexión típica. Se nombra con la letra C al cliente y con S al servidor.
+
En el siguiente ejemplo se muestra una conexión típica. Se nombra con la letra C al cliente y con S al servidor.  
  
S: 220 Servidor ESMTP
+
S: 220 Servidor ESMTP C: HELO miequipo.midominio.com S: 250 Hello, please meet you C: MAIL FROM: S: 250 Ok C: RCPT TO: S: 250 Ok C: DATA S: 354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt; C: Subject: Campo de asunto C: From: C: To: C: C: Hola, C: Esto es una prueba. C: Adiós. C: C: . S: 250 Ok: queued as 12345 C: quit S: 221 Bye  
C: HELO miequipo.midominio.com
 
S: 250 Hello, please meet you
 
C: MAIL FROM:
 
S: 250 Ok
 
C: RCPT TO:  
 
S: 250 Ok
 
C: DATA
 
S: 354 End data with <CR><LF>.<CR><LF>
 
C: Subject: Campo de asunto
 
C: From:  
 
C: To:  
 
C:
 
C: Hola,
 
C: Esto es una prueba.
 
C: Adiós.
 
C:
 
C: .
 
S: 250 Ok: queued as 12345
 
C: quit
 
S: 221 Bye
 
  
=== Formato del mensaje ===
+
=== Formato del mensaje ===
  
Como se muestra en el ejemplo anterior, el mensaje es enviado por el cliente después de que éste manda la orden DATA al servidor. El mensaje está compuesto por dos partes:
+
Como se muestra en el ejemplo anterior, el mensaje es enviado por el cliente después de que éste manda la orden DATA al servidor. El mensaje está compuesto por dos partes:  
  
* Cabecera: en el ejemplo las tres primeras líneas del mensaje son la cabecera. En ellas se usan unas palabras clave para definir los campos del mensaje. Éstos campos ayudan a los clientes de correo a organizarlos y mostrarlos. Los más típicos son ''subject'' (asunto), ''from'' (emisor) y ''to'' (receptor). Éstos dos últimos campos no hay que confundirlos con las órdenes MAIL FROM y RCPT TO, que pertenecen al protocolo, pero no al formato del mensaje.
+
*Cabecera: en el ejemplo las tres primeras líneas del mensaje son la cabecera. En ellas se usan unas palabras clave para definir los campos del mensaje. Éstos campos ayudan a los clientes de correo a organizarlos y mostrarlos. Los más típicos son ''subject'' (asunto), ''from'' (emisor) y ''to'' (receptor). Éstos dos últimos campos no hay que confundirlos con las órdenes MAIL FROM y RCPT TO, que pertenecen al protocolo, pero no al formato del mensaje.
  
* Cuerpo del mensaje: es el mensaje propiamente dicho. En el SMTP básico está compuesto únicamente por texto, y finalizado con una línea en la que el único carácter es un punto.
+
*Cuerpo del mensaje: es el mensaje propiamente dicho. En el SMTP básico está compuesto únicamente por texto, y finalizado con una línea en la que el único carácter es un punto.
  
== Seguridad y spam ==
+
== Seguridad y spam ==
  
Una de las limitaciones del SMTP original es que no facilita métodos de autenticación a los emisores, así que se definió la extensión SMTP-AUTH.
+
Una de las limitaciones del SMTP original es que no facilita métodos de autenticación a los emisores, así que se definió la extensión SMTP-AUTH.  
  
A pesar de esto, el [[spam]] es aún el mayor problema. No se cree que las extensiones sean una forma práctica para prevenirlo. [[Internet Mail 2000]] es una de las propuestas para reemplazarlo.
+
A pesar de esto, el [[Spam]] es aún el mayor problema. No se cree que las extensiones sean una forma práctica para prevenirlo. [[Internet Mail 2000]] es una de las propuestas para reemplazarlo.  
  
== Especificaciones ==
+
== Especificaciones ==
  
Ejemplo de transferencia de mensajes SMTP
+
Ejemplo de transferencia de mensajes SMTP  
  
Las líneas precedidas de <<"C:">> corresponden a comandos emitidos por el cliente y las que comienzan con <<"S:">> son las consiguientes respuestas que devuelve el servidor.
+
Las líneas precedidas de &lt;&lt;"C:"&gt;&gt; corresponden a comandos emitidos por el cliente y las que comienzan con &lt;&lt;"S:"&gt;&gt; son las consiguientes respuestas que devuelve el servidor.  
  
S: <en espera de conexión TCP en el puerto 25>
+
S: &lt;en espera de conexión TCP en el puerto 25&gt;
  
c: <abre la conexión con el servidor>
+
c: &lt;abre la conexión con el servidor&gt;
  
s:220 beta.gov Simple Mail Transfer Service ready
+
s:220 beta.gov Simple Mail Transfer Service ready  
  
 
c:HELO  
 
c:HELO  
  
s:250 beta.gov
+
s:250 beta.gov  
  
c:MAIL from :  
+
c:MAIL from&nbsp;:  
  
s:250 OK
+
s:250 OK  
  
 
c:RCPT TO:  
 
c:RCPT TO:  
  
s:250 OK
+
s:250 OK  
  
c:RCPT TO:
+
c:RCPT TO:  
  
s:550 No such user here
+
s:550 No such user here  
  
c:DATA
+
c:DATA  
  
s:354 Inicio de la entrada del mail; finaliza con <CRLF>.<CRLF>
+
s:354 Inicio de la entrada del mail; finaliza con &lt;CRLF&gt;.&lt;CRLF&gt;
  
c:.... se envía el contenido del mensaje (cabecera y cuerpo)...
+
c:.... se envía el contenido del mensaje (cabecera y cuerpo)...  
  
c:<CRLF>.<CRLF>
+
c:&lt;CRLF&gt;.&lt;CRLF&gt;
  
s:250 OK
+
s:250 OK  
  
c:QUIT
+
c:QUIT  
  
s:221 beta.gov Service closing transmition channel
+
s:221 beta.gov Service closing transmition channel  
  
=== Conexión al inicio del protocolo ===
+
=== Conexión al inicio del protocolo ===
  
'''Cuando se emplea el protocolo TCP el servidor SMTP escucha permanentemente al puerto 25, en espera de algún cliente que desea enviarlo. El protocolo de aplicación SMTP inicia el comando HELO, seguido de la identificación del cliente, el servidor lo acepta con un código''' <<250 OK>>.
+
'''Cuando se emplea el protocolo TCP el servidor SMTP escucha permanentemente al puerto 25, en espera de algún cliente que desea enviarlo. El protocolo de aplicación SMTP inicia el comando HELO, seguido de la identificación del cliente, el servidor lo acepta con un código''' &lt;&lt;250 OK&gt;&gt;.  
  
=== Envío de mensajes ===
+
=== Envío de mensajes ===
  
Una vez iniciado el protocolo, se realiza el envío de mensajes desde el cliente al servidor, mediante el siguiente proceso
+
Una vez iniciado el protocolo, se realiza el envío de mensajes desde el cliente al servidor, mediante el siguiente proceso  
  
==== Envío del sobre ====
+
==== Envío del sobre ====
  
En primer lugar se transmite la dirección del buzon del origen del mensaje, el comando es el MAIL FROM y si el servidor acepta envía el mensaje 250 OK. Luego se transmite la dirección de destino, mediante el comando RCPT TO y el servidor confirma con 250 OK, pero si el destinatario no existe se envía 550 Failure.
+
En primer lugar se transmite la dirección del buzon del origen del mensaje, el comando es el MAIL FROM y si el servidor acepta envía el mensaje 250 OK. Luego se transmite la dirección de destino, mediante el comando RCPT TO y el servidor confirma con 250 OK, pero si el destinatario no existe se envía 550 Failure.  
  
==== Envío del contenido del mensaje ====
+
==== Envío del contenido del mensaje ====
  
El cliente informa al servidor de que va a enviar el mensaje mendiante el comando DATA, si el servidor está dispuesto envía 354, todas las líneas que el cliente envía a partir de este momento se consideran parte del contenido del mensaje, al final del mensaje se considera enviando el <<.>>, cuando el servidor recibe el fin del mensaje confirma con 250 OK,
+
El cliente informa al servidor de que va a enviar el mensaje mendiante el comando DATA, si el servidor está dispuesto envía 354, todas las líneas que el cliente envía a partir de este momento se consideran parte del contenido del mensaje, al final del mensaje se considera enviando el &lt;&lt;.&gt;&gt;, cuando el servidor recibe el fin del mensaje confirma con 250 OK,  
  
=== Cierre de la conexión ===
+
=== Cierre de la conexión ===
  
Una vez enviado todos los mensajes, el cliente puede cerrar la conexión mediante el comando QUIT, caso contrario la máquina que recibió los mensajes sea quien las envíe con el comando TURN, el servidor confirma con 250 OK, dando una sección que se inicia con el comando HELO.
+
Una vez enviado todos los mensajes, el cliente puede cerrar la conexión mediante el comando QUIT, caso contrario la máquina que recibió los mensajes sea quien las envíe con el comando TURN, el servidor confirma con 250 OK, dando una sección que se inicia con el comando HELO.  
  
== Referencias ==
+
== Referencias ==
  
 
*[http://rfc.net/std1.html/ Internet Official Protocol Standards]
 
*[http://rfc.net/std1.html/ Internet Official Protocol Standards]
  
== Véase también ==
+
== Véase también ==
 
 
* [[POP3]]
 
* [[IMAP]]
 
* [[Mail transfer agent]]
 
* [[Sendmail]]
 
* [[DNS]]
 
* [[ESMTP]]
 
* [[Smtputils]]
 
  
== Enlaces externos ==
+
*[[POP3]]
 +
*[[IMAP]]
 +
*[[Mail transfer agent]]
 +
*[[Sendmail]]
 +
*[[DNS]]
 +
*[[ESMTP]]
 +
*[[Smtputils]]
  
* Protocolo SMTP: [http://www.ietf.org/rfc/rfc0821.txt RFC 821] reemplazado por [http://www.ietf.org/rfc/rfc2821.txt RFC 2821]
+
== Enlaces externos  ==
* Formato de Mails: [http://www.ietf.org/rfc/rfc822.txt RFC 822] reemplazado por [http://www.ietf.org/rfc/rfc2822.txt RFC 2822]
 
* Extensiones SMTP: [http://www.ietf.org/rfc/rfc1651.txt RFC1651]
 
* Herramienta de chequeo: [http://smtputils.sourceforge.net SMTPUtils]
 
  
 +
*Protocolo SMTP: [http://www.ietf.org/rfc/rfc0821.txt RFC 821] reemplazado por [http://www.ietf.org/rfc/rfc2821.txt RFC 2821]
 +
*Formato de Mails: [http://www.ietf.org/rfc/rfc822.txt RFC 822] reemplazado por [http://www.ietf.org/rfc/rfc2822.txt RFC 2822]
 +
*Extensiones SMTP: [http://www.ietf.org/rfc/rfc1651.txt RFC1651]
 +
*Herramienta de chequeo: [http://smtputils.sourceforge.net SMTPUtils]
  
[[Category:software]]
+
[[Category:Software]]

Revisión del 11:48 8 nov 2010

SMTP
Información sobre la plantilla

Plantilla:Mejorar SMTP (Simple Mail Transfer Protocol) Protocolo Simple de Transferencia de Correo, es un protocolo de la Capa de aplicación. Protocolo de red basado en texto utilizado para el intercambio de mensajes de Correo electrónico entre Computadoras u otros dispositivos (PDA's, Teléfonos móviles, etc.). Está definido en el RFC 2821 y es un estándar oficial de Internet.

Historia

En 1982 se diseñó el primer sistema para intercambiar correos electrónicos en ARPANET, definido en los Request for comments RFC 821 y RFC 822. La primera de ellas define este protocolo y la segunda el formato del mensaje que este protocolo debía transportar.

Con el tiempo se ha convertido en uno de los protocolos más usados en Internet. Para adaptarse a las nuevas necesidades surgidas por el crecimiento y popularidad de internet se han hecho varias ampliaciones a este protocolo, como poder enviar texto con formato.

Funcionamiento

SMTP se basa en el modelo Cliente-servidor, donde un cliente envía un mensaje a uno o varios receptores. La comunicación entre el cliente y el servidor consiste enteramente en líneas de texto compuestas por caracteres ASCII. El tamaño máximo permitido para estas líneas es de 1000 caracteres.

Las respuestas del servidor constan de un código numérico de tres digitos, seguido de un texto explicativo. El número va dirigido a un procesado automático de la respuesta por autómata, mientras que el texto permite que un humano interprete la respuesta. En el protocolo SMTP todas las órdenes, réplicas o datos son líneas de texto, delimitadas por el carácter <CRLF>. Todas las réplicas tienen un código numérico al comienzo de la línea.

En el conjunto de protocolos TCP/IP, el SMTP va por encima del TCP, usando normalmente el puerto 25 en el servidor para establecer la conexión.

Resumen simple del funcionamiento del protocolo SMTP

  • Cuando un cliente establece una conexión con el servidor SMTP, espera a que éste envíe un mensaje “220 Service ready” o “421 Service non available”
  • Se envía un HELO desde el cliente. Con ello el servidor se identifica. Esto puede usarse para comprobar si se conectó con el servidor SMTP correcto.
  • El cliente comienza la transacción del correo con la orden MAIL FROM. Como argumento de esta orden se puede pasar la dirección de correo al que el servidor notificará cualquier fallo en el envío del correo (Por ejemplo, MAIL FROM:<fuente@host0>). Luego si el servidor comprueba que el origen es valido, el servidor responde “250 OK”.
  • Ya le hemos dicho al servidor que queremos mandar un correo, ahora hay que comunicarle a quien. La orden para esto es RCPT TO:<destino@host>. Se pueden mandar tantas órdenes RCPT como destinatarios del correo queramos. Por cada destinatario, el servidor contestará “250 OK” o bien “550 No such user here”, si no encuentra al destinatario.
  • Una vez enviados todos los RCPT, el cliente envía una orden DATA para indicar que a continuación se envían los contenidos del mensaje. El servidor responde “354 Start mail input, end with <CRLF>.<CRLF>” Esto indica al cliente como ha de notificar el fin del mensaje.
  • Ahora el cliente envía el cuerpo del mensaje, línea a línea. Una vez finalizado, se termina con un <CRLF>.<CRLF> (la última línea será un punto), a lo que el servidor contestará “250 OK”, o un mensaje de error apropiado.
  • Tras el envío, el cliente, si no tiene que enviar más correos, con la orden QUIT corta la conexión. También puede usar la orden TURN, con lo que el cliente pasa a ser el servidor, y el servidor se convierte en cliente. Finalmente, si tiene más mensajes que enviar, repite el proceso hasta completarlos.

Puede que el servidor SMTP soporte las extensiones definidas en el RFC 1651, en este caso, la orden HELO puede ser sustituida por la orden EHLO, con lo que el servidor contestará con una lista de las extensiones admitidas. Si el servidor no soporta las extensiones, contestará con un mensaje "500 Syntax error, command unrecognized".

En el ejemplo pueden verse las órdenes básicas de SMTP:

  • HELO, para abrir una sesión con el servidor
  • MAIL FROM, para indicar quien envía el mensaje
  • RCPT TO, para indicar el destinatario del mensaje
  • DATA, para indicar el comienzo del mensaje, éste finalizará cuando haya una línea únicamente con un punto.
  • QUIT, para cerrar la sesión
  • RSET Aborta la transacción en curso y borra todos los registros.
  • SEND Inicia una transacción en la cual el mensaje se entrega a una terminal.
  • SOML El mensaje se entrega a un terminal o a un buzon.
  • SAML El mensaje se entrega a un terminal y a un buzon.
  • VRFY Solicita al servidor la verificación del argumento.
  • EXPN Solicita al servidor la confirmación del argumento.
  • HELP Permite solicitar información sobre un comando.
  • NOOP Se emplea para reiniciar los temporizadores.
  • TURN Solicita al servidor que intercambien los paquetes.

De los tres dígitos del código numérico, el primero indica la categoría de la respuesta, estando definidas las siguientes categorías:

  • 2XX, la operación solicitada mediante el comando anterior ha sido concluida con éxito
  • 3XX, la orden ha sido aceptada, pero el servidor esta pendiente de que el cliente le envíe nuevos datos para terminar la operación
  • 4XX, para una respuesta de error, pero se espera a que se repita la instrucción
  • 5XX, para indicar una condición de error permanente, por lo que no debe repetirse la orden

Una vez que el servidor recibe el mensaje finalizado con un punto puede almacenarlo si es para un destinatario que pertenece a su dominio, o bien retransmitirlo a otro servidor para que finalmente llegue a un servidor del dominio del receptor.

Ejemplo de una comunicación SMTP

En primer lugar se ha de establecer una conexión entre el emisor (cliente) y el receptor (servidor). Esto puede hacerse automáticamente con un programa cliente de correo o mediante un cliente Telnet.

En el siguiente ejemplo se muestra una conexión típica. Se nombra con la letra C al cliente y con S al servidor.

S: 220 Servidor ESMTP C: HELO miequipo.midominio.com S: 250 Hello, please meet you C: MAIL FROM: S: 250 Ok C: RCPT TO: S: 250 Ok C: DATA S: 354 End data with <CR><LF>.<CR><LF> C: Subject: Campo de asunto C: From: C: To: C: C: Hola, C: Esto es una prueba. C: Adiós. C: C: . S: 250 Ok: queued as 12345 C: quit S: 221 Bye

Formato del mensaje

Como se muestra en el ejemplo anterior, el mensaje es enviado por el cliente después de que éste manda la orden DATA al servidor. El mensaje está compuesto por dos partes:

  • Cabecera: en el ejemplo las tres primeras líneas del mensaje son la cabecera. En ellas se usan unas palabras clave para definir los campos del mensaje. Éstos campos ayudan a los clientes de correo a organizarlos y mostrarlos. Los más típicos son subject (asunto), from (emisor) y to (receptor). Éstos dos últimos campos no hay que confundirlos con las órdenes MAIL FROM y RCPT TO, que pertenecen al protocolo, pero no al formato del mensaje.
  • Cuerpo del mensaje: es el mensaje propiamente dicho. En el SMTP básico está compuesto únicamente por texto, y finalizado con una línea en la que el único carácter es un punto.

Seguridad y spam

Una de las limitaciones del SMTP original es que no facilita métodos de autenticación a los emisores, así que se definió la extensión SMTP-AUTH.

A pesar de esto, el Spam es aún el mayor problema. No se cree que las extensiones sean una forma práctica para prevenirlo. Internet Mail 2000 es una de las propuestas para reemplazarlo.

Especificaciones

Ejemplo de transferencia de mensajes SMTP

Las líneas precedidas de <<"C:">> corresponden a comandos emitidos por el cliente y las que comienzan con <<"S:">> son las consiguientes respuestas que devuelve el servidor.

S: <en espera de conexión TCP en el puerto 25>

c: <abre la conexión con el servidor>

s:220 beta.gov Simple Mail Transfer Service ready

c:HELO

s:250 beta.gov

c:MAIL from :

s:250 OK

c:RCPT TO:

s:250 OK

c:RCPT TO:

s:550 No such user here

c:DATA

s:354 Inicio de la entrada del mail; finaliza con <CRLF>.<CRLF>

c:.... se envía el contenido del mensaje (cabecera y cuerpo)...

c:<CRLF>.<CRLF>

s:250 OK

c:QUIT

s:221 beta.gov Service closing transmition channel

Conexión al inicio del protocolo

Cuando se emplea el protocolo TCP el servidor SMTP escucha permanentemente al puerto 25, en espera de algún cliente que desea enviarlo. El protocolo de aplicación SMTP inicia el comando HELO, seguido de la identificación del cliente, el servidor lo acepta con un código <<250 OK>>.

Envío de mensajes

Una vez iniciado el protocolo, se realiza el envío de mensajes desde el cliente al servidor, mediante el siguiente proceso

Envío del sobre

En primer lugar se transmite la dirección del buzon del origen del mensaje, el comando es el MAIL FROM y si el servidor acepta envía el mensaje 250 OK. Luego se transmite la dirección de destino, mediante el comando RCPT TO y el servidor confirma con 250 OK, pero si el destinatario no existe se envía 550 Failure.

Envío del contenido del mensaje

El cliente informa al servidor de que va a enviar el mensaje mendiante el comando DATA, si el servidor está dispuesto envía 354, todas las líneas que el cliente envía a partir de este momento se consideran parte del contenido del mensaje, al final del mensaje se considera enviando el <<.>>, cuando el servidor recibe el fin del mensaje confirma con 250 OK,

Cierre de la conexión

Una vez enviado todos los mensajes, el cliente puede cerrar la conexión mediante el comando QUIT, caso contrario la máquina que recibió los mensajes sea quien las envíe con el comando TURN, el servidor confirma con 250 OK, dando una sección que se inicia con el comando HELO.

Referencias

Véase también

Enlaces externos