Enviando un email smtp desde el microcontrolador

2

Es posible que esto no esté en la ubicación correcta, así que avísame y lo moveré.

Soy un recién graduado de EE y me contrataron para construir un sistema que existe en un SoC con un simple procesador de 32 bits. El sistema básicamente supervisa varios dispositivos externos y realiza algunos DSP, y luego se supone que debe enviar los resultados utilizando un dispositivo WiFi (en mi caso tengo el ESP8266 usando UDP) a un servidor de correo electrónico para el registro / notificación.

He estado tratando de encontrar una biblioteca que pueda usar, pero mi uC solo puede programar en C y la tengo configurada para UDP, y todo está en C ++ usando algún otro protocolo, o alguna otra cosa completamente.

Soy excelente en DSP, decente en SoC's y uC's, pero en lo que respecta a la comunicación de este servidor de correo electrónico, estoy perdido.

He configurado con éxito todo para los sensores, la ruta de datos, el DSP y conecté el sistema a mi WiFi a través de UDP, pero todavía tengo que averiguar cómo enviar datos a los servidores.

¿Podría alguien ayudarme a entender cómo debo hacer esto?

He investigado algunos comandos SMTP simples como HELO, CORREO, RCPT, DATOS, etc., pero no puedo entender cómo debo implementarlos en mi código.

Cuando envío los datos de WiFi a través de UDP, ¿qué tipo de datos envío y cómo los formateo? ¿Necesito enviar algún otro tipo de banderas? ¿Cómo debo esperar la respuesta? También sé que los datos deben transformarse en base 64, lo que me confunde aún más.

Para empezar, tampoco estoy muy familiarizado con UDP, he estado usando bibliotecas que forman parte de la biblioteca predeterminada de SoC para conectarme a mi WiFi.

Sé que estas preguntas pueden parecer obvias o estúpidas, pero es cuando ya no tengo ningún conocimiento, y todo lo que encuentro en línea no tiene sentido, o no intenta explicarlo, solo da una pre- solución hecha

He encontrado el RFC2821 pero no se aclara.

Sé que eso es mucho, ¡pero cualquier ayuda sería un salvavidas!

    
pregunta scarlso9

2 respuestas

7

Bien, entonces en orden:

  • Para enviar un correo electrónico, su equipo necesita tener una conversación SMTP con un servidor de correo en algún lugar. En esta conversación, su sistema será un cliente para el servidor de correo.

  • SMTP es un protocolo que se ejecuta en TCP, no en UDP. No hay un equivalente UDP simple.

  • La forma más sencilla de entender SMTP sería mirar RFC821, que es muy, muy antiguo y ha sido reemplazado, pero aún describe los principios básicos correctamente.

  • TCP es mucho, mucho, mucho más complejo de implementar que UDP (como un mes o una hora), y si te cuesta comprender los rfcs de SMTP, encontrarás que TCP es muy difícil. / p>

En general, si necesito UDP / IP, simplemente escribo el código para hacerlo, y si necesito TCP / IP, uso la pila de otra persona (a menudo LWIP en procesadores pequeños).

No cometa el error de pensar que TCP es 'un esfuerzo extra' contra UDP, no es así en absoluto, y es un 'algo más' muy grande. Si desea que funcione de forma razonable ante la pérdida de paquetes que obtiene en WiFi, necesita una implementación decente, no solo lo más básico de SYN / ACK.

Mi consejo: comienza con lwip: si no puedes hacer eso, entonces probablemente no estés listo para escribir el resto.

Actualización: asegúrese de ver el comentario de Dave Tweed a continuación. No me había dado cuenta de que su módulo ya tenía una pila TCP / IP completa. Básicamente, solo tiene que averiguar cómo enviar y recibir líneas de texto sobre TCP con En ese caso, debe poder trabajar a través de RFC821 (y sus sucesores) para enviar un mensaje.

    
respondido por el user1844
0

Hay una arruga más además de lo que Will Dean dijo.

Como dijo en su punto 1, necesitas tener una conversación SMTP con un servidor de correo en algún lugar. La parte de algún lugar puede ser complicada. Si este dispositivo se va a enviar a través de un servidor conocido dedicado, todo lo que necesita es almacenar su dirección IP estática.

Sin embargo, en el caso más general, debe hacer una búsqueda MX en el dominio de la dirección de correo electrónico para encontrar el servidor que acepta el correo para ese dominio. El proceso de encontrar la dirección IP correcta a partir de una dirección de correo electrónico puede ser más complicado que enviar el mensaje una vez que conoce el servidor. Debe ponerse en contacto con un servidor DNS, que puede proporcionarle la información directamente, o puede pasar el dinero a otro servidor. Estas conversaciones requieren UDP si recuerdo bien.

Para simplificar esto, puedes configurar tu único servidor conocido al que se envían todos tus dispositivos. Sin embargo, dado que este servidor se retransmitirá, debe protegerlo para que los spammers y otras bolsas de basura no puedan usarlo para retransmitir mensajes a través de él. Sus dispositivos deben autenticarse de alguna manera, y su servidor debe rechazar las solicitudes de conexión de cualquier otra cosa. SMTP tiene la posibilidad de autenticación integrada, pero los métodos que no requieren mucha codificación no son muy seguros. Si alguien puede tomar uno de sus dispositivos y capturar paquetes desde él, podría aprender cómo autenticarse en su servidor. Esto significa que necesitas implementar una autenticación mucho más sofisticada.

Si prescinde de un servidor especial, debe realizar las búsquedas MX o hacer que el usuario configure el dispositivo en un servidor SMTP específico con anticipación que acepte mensajes para el dominio al que se enviará el dispositivo.

No es tan simple como tener que tener una conversación con un servidor de correo.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas