Microsoft 365 - Outlook¶
Procesa tus mensajes de correo electrónico a través de una cuenta de Microsoft 365. Filtra, lee y envía nuevos mensajes fácilmente a través del complemento de BotCity para Outlook.
Warning
Para poder utilizar este complemento, necesitas tener una cuenta de Microsoft 365 con un proyecto creado y configurado correctamente.
Después de crear un proyecto, debes completar el proceso de autenticación a través del complemento de Credenciales de Microsoft 365.
Para más detalles, consulta las secciones anteriores:
Instalación¶
Importando 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.
Configurando la cuenta de servicio¶
Como se mencionó anteriormente, para utilizar el complemento de Outlook, es necesario realizar el proceso de autenticación de la cuenta a través del complemento de Credenciales de Microsoft 365.
Con la instancia del complemento de credenciales obtenida, vamos a utilizarla para instanciar el complemento de Outlook.
from botcity.plugins.ms365.credentials import MS365CredentialsPlugin, Scopes
from botcity.plugins.ms365.outlook import MS365OutlookPlugin
# Instantiate the Credentials plugin
service = MS365CredentialsPlugin(
client_id='<APPLICATION ID>',
client_secret='<SECRET VALUE>',
)
service.authenticate(scopes=[Scopes.BASIC, Scopes.MAIL_READ_WRITE])
# Instantiate the Outlook Plugin
outlook = MS365OutlookPlugin(service_account=service)
Tip
Para utilizar el servicio de Outlook, simplemente agrega el ámbito Scopes.MAIL_READ_WRITE
que se refiere a los permisos Mail.ReadWrite
y Mail.Send
del proyecto.
Consulta más detalles sobre ámbitos y permisos en este enlace.
Administrando carpetas de correo electrónico¶
Podemos realizar varias operaciones con las carpetas de correo electrónico. Puedes crear, eliminar y obtener carpetas existentes.
outlook = MS365OutlookPlugin(service_account=service)
# Creating a new folder
outlook.create_folder("TestFolder")
# Deleting an existing folder
outlook.delete_folder("MyFolder")
# Getting the reference of a specific folder
folder = outlook.get_folder("MessagesToRead")
# Returning existing folders in email
for folder in outlook.get_folders():
print(folder.name)
Además de devolver todas las carpetas de correo electrónico de la carpeta "raíz", también es posible utilizar una carpeta principal como referencia.
De esta manera, podríamos devolver todas las subcarpetas dentro de un contexto más específico.
También podemos configurar una carpeta de correo electrónico para utilizarla como referencia en las operaciones de búsqueda de mensajes.
Tip
Por defecto, se utilizará la carpeta inbox como referencia para las operaciones.
Si deseas utilizar una carpeta diferente como referencia, configúrala utilizando el método set_default_folder
.
outlook = MS365OutlookPlugin(service_account=service)
# Getting the reference of a specific folder
folder = outlook.get_folder("TestFolder")
# Setting the default folder
outlook.set_default_folder(folder=folder)
# It is also possible to configure using the folder name
outlook.set_default_folder(folder="TestFolder")
Obteniendo mensajes de correo electrónico¶
Pudimos buscar mensajes de correo electrónico utilizando filtros específicos fácilmente.
Note
Los filtros se basan en el Protocolo de Datos Abiertos (OData) y pueden tener diferentes complejidades.
Consulta más detalles sobre cómo crear filtros avanzados en la sección Uso de atributos y filtros de correo electrónico.
outlook = MS365OutlookPlugin(service_account=service)
# Creating a new filter through the Query object
query_filter = outlook.new_query_filter()
# Filter using email subject
query_filter.on_attribute("subject").equals("Test Message")
# Searching for all emails with the subject "Test Message"
messages = outlook.search_messages(criteria=query_filter)
for msg in messages:
print(msg)
Administrando mensajes de correo electrónico¶
El método search
devuelve una lista de todos los mensajes encontrados. Con estos objetos de mensaje devueltos, podemos acceder a algunas propiedades específicas.
outlook = MS365OutlookPlugin(service_account=service)
# Creating a new filter through the Query object
query_filter = outlook.new_query_filter()
# Filter using the address that sent the message
query_filter.on_attribute("from").equals("user@email.com")
# Fetching emails and getting specific properties
messages = outlook.search_messages(criteria=query_filter)
for msg in messages:
print(msg.subject)
print(msg.body_preview)
print(msg.received)
Además de acceder a propiedades específicas, también podemos realizar algunas operaciones con los mensajes obtenidos.
Responder y reenviar mensajes¶
Realizando operaciones con mensajes¶
messages = outlook.search_messages(criteria=query_filter, include_attachments=True)
for msg in messages:
# Marking the message as "read"
outlook.mark_as_read(msg)
# Downloading message attachments
outlook.download_attachments(msg, download_folder_path="./Downloads")
# Copying a message to another email folder
outlook.copy(msg=messages[0], folder_name="SubFolder")
# Moving a message to another email folder
outlook.move(msg=messages[0], folder_name="MyFolder")
# Deleting a message from the email folder
outlook.delete(msg=messages[0])
Warning
Para descargar archivos adjuntos a un mensaje, es necesario configurar el parámetro include_attachments=True
en el método search_messages
.
Por defecto, la API devuelve mensajes sin el contenido del adjunto.
Enviando mensajes¶
Además de acceder a los mensajes de correo electrónico recibidos, podemos enviar nuevos mensajes.
outlook = MS365OutlookPlugin(service_account=service)
# Defining message attributes
to = ["<RECEIVER_ADDRESS_1>", "<RECEIVER_ADDRESS_2>"]
cc = ["<ANOTHER_ADDRESS>"]
subject = "Hello World"
body = "Hello! This is a test message!"
files = ["my_file.txt"]
# Sending the email message
outlook.send_message(subject, body, to, cc, attachments=files)
Tip
También puedes enviar mensajes con formato HTML. Solo incluye el formato deseado en la cadena del cuerpo del mensaje.