Saltar a contenido

E-mail

Filtrar, buscar, leer y escribir correos electrónicos utilizando los protocolos IMAP y SMTP.

Instalación

pip install botcity-email-plugin

Importar el complemento

Después de instalar este paquete, el siguiente paso es importar el paquete en tu código y comenzar a utilizar las funciones.

from botcity.plugins.email import BotEmailPlugin

Permisos de SMTP e IMAP

En algunos casos, para poder utilizar las funcionalidades de correo electrónico a través de los protocolos IMAP y SMTP, es necesario activar el permiso para utilizar ambos protocolos en la configuración de la cuenta. Además, también puede ser necesario habilitar la opción para aplicaciones menos seguras.

Autenticación de dos factores

Recomendamos desactivar la autenticación de dos factores para las cuentas de correo electrónico para evitar cualquier tipo de bloqueo de bot. Si estás utilizando una cuenta con autenticación de dos factores y no es posible desactivarla, consulta la sección Autenticación de dos factores.

Configuración de la cuenta de correo electrónico

Primero, configuremos nuestra cuenta de correo electrónico e iniciemos sesión con las credenciales.

# Instantiate the plugin
email = BotEmailPlugin()

# Configure IMAP with the gmail server
email.configure_imap("imap.gmail.com", 993)

# Configure SMTP with the gmail server
email.configure_smtp("imap.gmail.com", 587)

# Login with a valid email account
email.login("<USER_EMAIL>", "<USER_PASSWORD>")

Info

Puedes utilizar diferentes servidores de correo, la información sobre algunos servidores se puede ver en esta página.

Configuración alternativa

Tienes la opción de configurar los servidores que se utilizarán de la forma que desees. Sin embargo, en algunos casos puedes simplemente utilizar la configuración predeterminada de un servidor conocido y conectar tu cuenta rápidamente.

La configuración anterior también podría verse así:

from botcity.plugins.email import BotEmailPlugin, MailServers

# Configure and log in on the same method, using the default Gmail server settings
email = BotEmailPlugin.config_email(MailServers.GMAIL, "<USER_EMAIL>","<USER_PASSWORD>")

Obtención de algunos mensajes de correo electrónico

Con la instancia del complemento configurada, recuperaremos algunos mensajes de correo electrónico.

Note

Por favor, evita utilizar palabras que contengan acentos o caracteres especiales al utilizar los métodos para filtrar y buscar mensajes. Esto es un problema de los servidores de correo electrónico, que causa una excepción al intentar buscar correos electrónicos utilizando caracteres especiales en el filtro.

# Search for all emails with subject: Test Message
messages = email.search('SUBJECT "Test Message"')

# For each email found: prints the date, sender address and text content of the email
for msg in messages:
    print("\n---------------------------")
    print("Date => " + msg.date_str)
    print("From => " + msg.from_)
    print("Msg => " + msg.text)

Info

En este ejemplo, se utilizó el atributo SUBJECT como filtro, puedes tener una idea de los atributos que se pueden utilizar en este enlace.

Consulta más detalles sobre cómo crear filtros avanzados en esta sección.

Otra forma de obtener algunos mensajes de correo electrónico

En el método search utilizado anteriormente, es necesario pasar una cadena que contenga el filtro que se utilizará. Sin embargo, en algunos casos puede resultar confuso y es difícil construir el filtro correctamente.

Por lo tanto, a través del método filter by, es posible seleccionar el atributo que se utilizará en el filtro y pasar el valor de este atributo. Esto facilita mucho la construcción de filtros al recuperar mensajes.

from botcity.plugins.email import MailFilters

# Search for all emails with subject: Test Message
messages = email.filter_by(MailFilters.SUBJECT, "Test Message")

Enviar un nuevo mensaje desde cero

Después de recuperar algunos correos electrónicos, enviaremos un nuevo mensaje.

# Defining the attributes that will compose the message
to = ["<RECEIVER_ADDRESS_1>", "<RECEIVER_ADDRESS_2>"]
subject = "Hello World"
body = "<h1>Hello!</h1> This is a test message!"
files = ["my_file.txt"]

# Sending the email message
email.send_message(subject, body, to, attachments=files, use_html=True)

# Close the conection with the IMAP and SMTP servers
email.disconnect()

Código completo

Echemos un vistazo al código completo:

# Import the plugin
from botcity.plugins.email import BotEmailPlugin

# Instantiate the plugin
email = BotEmailPlugin()

# Configure IMAP with the gmail server
email.configure_imap("imap.gmail.com", 993)

# Configure SMTP with the gmail server
email.configure_smtp("imap.gmail.com", 587)

# Login with a valid email account
email.login("<USER_EMAIL>", "<USER_PASSWORD>")

# Search for all emails with subject: Test Message
messages = email.search('SUBJECT "Test Message"')

# For each email found: prints the date, sender address and text content of the email
for msg in messages:
    print("\n---------------------------")
    print("Date => " + msg.date_str)
    print("From => " + msg.from_)
    print("Msg => " + msg.text)

# Defining the attributes that will compose the message
to = ["<RECEIVER_ADDRESS_1>", "<RECEIVER_ADDRESS_2>"]
subject = "Hello World"
body = "<h1>Hello!</h1> This is a test message!"
files = ["my_file.txt"]

# Sending the email message
email.send_message(subject, body, to, attachments=files, use_html=True)

# Close the conection with the IMAP and SMTP servers
email.disconnect()