Featured image of post Enviar correos electrónicos con Python

Enviar correos electrónicos con Python

Incluir una función para enviar correos electrónicos en Python puede ser muy útil. En este artículo describo una función que manda correos electrónicos.

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:

# envia_correo.py
# ---------------------------------------------------------

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

def manda_correo(nombre, direccion):

    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."

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

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

manda_correo("Francisco","destino@correo.com")
funcion que envia correos en python

funcion que envia correos en python

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

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.

Enviar correos usando una conexión SSL

Para lograr enviar correos electrónicos con un servidor SMTP que utiliza el puerto 465 con una conexión SSL hay que agregar algunas cosas.

Por ejemplo, importar la librería ssl, darle un poco de forma al mensaje_mime y por último enviar el correo.

Creo que este código de ejemplo lo explica bastante bien.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

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

# Información de conexión al servidor SMTP
servidor_smtp = "smtp.servidor.com"
puerto = 465
usuario_login = "usuario"
password = "contraseña"
contexto = ssl.create_default_context()

# Origen, destino y mensaje
direccion_origen = "de@correo.com"
direccion_destino = "para@correo.com"

mensaje = """
Hola,\n
Este es un correo de prueba.\n
¡Saludos!
"""

mensaje_mime = MIMEText(mensaje, "plain")
mensaje_mime["From"] = direccion_origen
mensaje_mime["To"] = direccion_destino
mensaje_mime["Reply-to"] = direccion_origen
mensaje_mime["Subject"] = "Correo de prueba"

# Envio del correo electrónico
with smtplib.SMTP_SSL(servidor_smtp, puerto, context=contexto) as server:
    server.login(usuario_login, password)
    server.sendmail(direccion_origen, direccion_destino, mensaje_mime.as_string())

Para saber más.

Licensed under CC BY-NC-SA 4.0
Última actualización 17 jul. 2018 717:00 CST
Todas las imágenes, nombres de productos y nombres de empresa o logotipos citados en esta página web son propiedad de sus respectivos propietarios.
Creado con Hugo
Tema Stack diseñado por Jimmy