E-mail¶
Filtrar, buscar, leer y escribir correos electrónicos utilizando los protocolos IMAP y SMTP.
Instalación¶
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.
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.
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í:
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.
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()