Archivo de la categoría: SMTP

Enviar emails con Arduino

El Simple Mail Transfer Protocol (SMTP) (Protocolo para la transferencia simple de correo electrónico), es un protocolo de red utilizado para el intercambio de mensajes de correo electrónico entre ordenadores u otros dispositivos (Arduino, teléfonos móviles, etc.). Fue definido en el RFC 2821 y es un estándar oficial de Internet.

El funcionamiento de este protocolo se da en línea, de manera que opera en los servicios de correo electrónico. Sin embargo, este protocolo posee algunas limitaciones en cuanto a la recepción de mensajes en el servidor de destino (cola de mensajes recibidos). Como alternativa a esta limitación se asocia normalmente a este protocolo con otros, como el POP o IMAP, otorgando a SMTP la tarea específica de enviar correo, y recibirlos empleando los otros protocolos antes mencionados (POP O IMAP).

Más información en: http://es.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol y http://es.kioskea.net/contents/279-protocolos-de-mensajeria-smtp-pop3-e-imap4

Éste es un protocolo que funciona en línea, encapsulado en una trama TCP/IP. El correo se envía directamente al servidor de correo del destinatario. El protocolo SMTP funciona con comandos de textos enviados al servidor SMTP (al puerto 25 de manera predeterminada). A cada comando enviado por el cliente (validado por la cadena de caracteres ASCII CR/LF, que equivale a presionar la tecla Enter) le sigue una respuesta del servidor SMTP compuesta por un número y un mensaje descriptivo.

Esta es la secuencia de envío de un correo:

  • Al abrir la sesión SMTP, el primer comando que se envía es el comando HELO seguido por un espacio (escrito <SP>) y el nombre de dominio de su equipo (para decir «hola, soy este equipo»), y después validado por Enter (escrito <CRLF>). Desde abril de 2001, las especificaciones para el protocolo SMTP, definidas en RFC 2821, indican que el comando HELO sea remplazado por el comando EHLO.
  • El segundo comando es «MAIL FROM:» seguido de la dirección de correo electrónico del remitente. Si se acepta el comando, el servidor responde con un mensaje «250 OK».
  • El siguiente comando es «RCPT TO:» seguido de la dirección de correo electrónico del destinatario. Si se acepta el comando, el servidor responde con un mensaje «250 OK».
  • El comando DATA es la tercera etapa para enviar un correo electrónico. Anuncia el comienzo del cuerpo del mensaje. Si se acepta el comando, el servidor responde con un mensaje intermediario numerado 354 que indica que puede iniciarse el envío del cuerpo del mensaje.
  • Si se acepta el comando, el servidor responde con un mensaje «250 OK».

smtp

Las especificaciones básicas del protocolo SMTP indican que todos los caracteres enviados están codificados mediante el código ASCII de 7 bits y que el 8º bit sea explícitamente cero. Por lo tanto, para enviar caracteres acentuados es necesario recurrir a algoritmos que se encuentren dentro de las especificaciones MIME.

Ejemplo de Conversación SMTP mediante telnet:

RFC 2821:

Para enviar correos electrónicos desde arduino, es como si lo hiciéramos utilizando telnet. Esto se hacía mucho antiguamente cuando los  servidores de correo no solían estar protegidos contra el reenvío de emails y cualquiera podía conectarse al puerto  25 de un servidor de correo y enviar un correo con un remitente falso.

Un ejemplo de como mandar correo electrónico con Arduino directamente:

Obviamente para poder enviar un correo de la forma anteriormente vista necesitamos un servidor SMTP no protegido. La gran mayoría de los servidores de correo requieren que nos autentiquemos por lo que se complica un poco el proceso de enviar correo a través de telnet pero esto no significa que no podamos hacerlo.

Podemos montar una raspberry pi que haga de servidor SMTP que reciba los correos de nuestro arduino y usar la raspberry pi para que reenvíe los correos a través de gmail u otro servicio de correo.

Por supuesto disponemos de librerías que implementan un cliente SMTP en arduino:

Ejercicio31-MandaCorreo: Mandar un correo desde Arduino

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio31-MandaCorreo

Otra estrategia para mandar correos desde Arduino es dejarlo en manos de un servidor, es decir, con Arduino mando un POST HTTP que recoge el servidor y este mediante PHP, python u otro lenguaje se encarga de mandar el correo con las librería que tiene disponibles.