Enviar correos electrónicos con Python

envía correo con python

Incluir una función para enviar correos electrónicos en Python puede ser muy útil. Agregué esta función en el programa que utilizo para monitorear mis equipos de red para que me mande un correo electrónico en caso de alguna falla (léase Python Ping, un script que revisa las direcciones IP de tu red ).

Combinando esta función con una base de datos se puede aprovechar para mandar correos personalizados.  Para notificar cambios en el sistema, como un cambio de contraseña, o avisar de alguna situación. En fin que las aplicaciones son muchas y muy útiles.

Pero pongamos manos a la obra con un ejemplo.

Importar módulos.

Una de las cosas que más me gusta de python es que si no tiene una opción se puede incluir importando un módulo que de otro modo tardarías mucho tiempo en desarrollar.

Para lograr que mi script mande correos electrónicos incluí estas líneas al comienzo del programa.

from email.mime.text import MIMEText
from smtplib import SMTP

La función manda_correo

El trabajo pesado lo hace la función manda_correo cuyo trabajo se puede dividir en 3 partes.

La primera junta información, ¿Quién manda el correo?, ¿A cuál dirección se va a mandar? y el cuerpo del mensaje.

    from_address = "origen@correo.com"
    to_address = direccion
    message = "Hola " + nombre +", \n\n" + \
        "Este correo es solo para saludarte." + \
        "\n\nAtentamente," + \
        "\n\nTu función que manda correos desde Python."

La segunda que se encarga de construir un correo electrónico con la información que le proporcionaste

    mime_message = MIMEText(message, "plain")
    mime_message["From"] = from_address
    mime_message["To"] = to_address
    mime_message["Subject"] = "Saludos " + nombre

Y por último, la parte que se encarga de negociar con el servidor y mandar el correo electrónico.

    smtp = SMTP('servidordecorreo.com',587)
    smtp.login("usuario","contraseña")
    smtp.sendmail(from_address, to_address, mime_message.as_string())
    smtp.quit()

Los parámetros de la función son totalmente personalizables y en mi caso sólo usé un nombre coloquial para el saludo y la dirección de correo de destino.

Aquí pueden leer el código completo:

funcion que envia correos en python
¡Llegó el correo!

Ahora con HTML.

Me preguntaron como hacer para mandar correos con estilo y eso se logra con HTML. Para lograrlo hay que hacer algunos ajustes.

enviar correos con html con python

En la línea 16 hay que cambiar de plain a html y claro, incluir los códigos HTML  en el cuerpo del mensaje.

Y así de simple, de golpe y porrazo ya tenemos una función que manda correos electrónicos desde Python.

Para saber más.

Imagen principal de Samuel Zeller en Unsplash.