Ir al contenido

← Todas las funcionalidades

Monitorización geotécnica de taludServidor (Node-RED)SMTPAlertas

Alertas por email con smtplib y una app password de Gmail

Cuando un concentrador remoto se reinicia o un sensor supera su umbral, alguien tiene que enterarse en minutos. Estas alertas por email SMTP no usan nada fuera de la librería estándar de Python: smtplib con STARTTLS contra smtp.gmail.com y una app password de Gmail. El script procede de un despliegue real de monitorización de talud, donde notifica los reinicios del concentrador Raspberry Pi y reenvía las alarmas de nivel 3-4 detectadas por Node-RED en cuatro estaciones ESP32 PLC 14 Ethernet.

Dos modos, un script

Llamado con dos argumentos envía cualquier asunto y cuerpo — así es como el nodo exec de Node-RED reenvía las alarmas clasificadas. Llamado sin argumentos envía un aviso estándar de reinicio con hostname y timestamp, lo que lo hace ideal para una entrada @reboot de cron. Un solo fichero cubre las alertas planificadas y las imprevistas.

App passwords, no tu contraseña real

Gmail bloquea los logins con contraseña normal desde scripts. Con la verificación en dos pasos activada se genera una app password de 16 caracteres que solo sirve para SMTP y se puede revocar sin tocar la cuenta. En el código es el placeholder APP_PASSWORD; en producción se carga desde una variable de entorno, nunca desde el repositorio.

Cabeceras que sobreviven a los filtros de spam

El mensaje se construye con MIMEText y cabeceras Subject, From y To explícitas, codificadas en UTF-8. Los emails automáticos sin cabeceras correctas son lo primero que descartan los filtros de spam — y una alerta de monitorización que cae en spam es peor que ninguna alerta, porque todos creen que se envió.

Un fragmento de la implementación

Tal cual del ejemplo desplegado en el Servidor (Node-RED) — cópialo libremente:

def build_message(subject, body):
    """Builds the MIMEText with full headers to avoid spam filters."""
    message = MIMEText(body, "plain", "utf-8")
    message["Subject"] = subject
    message["From"] = EMAIL_SENDER
    message["To"] = EMAIL_RECEIVER
    return message

El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.

Preguntas frecuentes

¿Por qué email y no una app de mensajería o SMS?

El email no necesita servicios extra, ni SIM, ni contrato de API, y el buzón de soporte ya está vigilado. Para mayor criticidad puedes añadir canales después, manteniendo SMTP como la base que siempre funciona.

¿Funciona con proveedores distintos de Gmail?

Sí. Vale cualquier servidor SMTP con STARTTLS en el puerto 587 — cambia SMTP_HOST y las credenciales. Gmail con app password es simplemente un valor por defecto cómodo y fiable para despliegues pequeños.

¿Cómo dispara Node-RED los emails de alarma?

El flujo de polling clasifica cada lectura de estación en niveles 0-4. Los niveles 3 y 4 se enrutan a una función que formatea asunto y cuerpo, y después un nodo exec ejecuta este script con ambos como argumentos.

Funcionalidades relacionadas