Saltar a contenido

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

pip install botcity-ms365-outlook-plugin

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.

from botcity.plugins.ms365.outlook import MS365OutlookPlugin

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.

outlook = MS365OutlookPlugin(service_account=service)

# Getting the reference of a specific folder
folder = outlook.get_folder("MessagesToRead")

# Returning only the subfolders of the parent folder "MessagesToRead"
for folder in outlook.get_folders(parent_folder=folder):
    print(folder.name)

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

messages = outlook.search_messages(criteria=query_filter)

# Replying or forwarding each email depending on the subject
for msg in messages:
    if msg.subject == "Reply this message":
        outlook.reply_to_all(msg=msg, text_content="OK!")
    else:
        outlook.forward(msg=msg, to_addrs=["email_1", "email_2"])

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.