Python Leer correo electrónico de Outlook

Salman Mehmood 10 octubre 2023
  1. Use el módulo win32com.client para leer el correo electrónico desde la aplicación de Outlook
  2. Filtrar correos electrónicos con propiedades
Python Leer correo electrónico de Outlook

Este artículo discutirá cómo leer correos electrónicos desde la aplicación de Outlook con la ayuda del módulo win32com.client. También aprendemos cómo filtrar correos electrónicos con diferentes propiedades en Python.

Use el módulo win32com.client para leer el correo electrónico desde la aplicación de Outlook

Supongamos que desea seguir monitoreando un determinado producto en el sitio web de Amazon para verificar si el precio de ese producto fluctúa. Para mantenerlo simple, solo leeremos correos electrónicos de Outlook usando el script de Python.

Crearemos un programa Python que leerá el último correo electrónico y nos permitirá saber quién es el remitente del correo electrónico y cuál es el asunto del correo electrónico. Esto también nos permitirá saber cuál es el cuerpo del correo electrónico.

Primero, instalaremos el paquete pywin32.

pip install pywin32

Este paquete llama a Outlook y lee correos electrónicos de Outlook. Una vez hecho esto, estamos listos para escribir nuestro programa importando el módulo cliente de win32com.

import win32com.client as client

Ahora creamos la variable llamada My_OL_App, y obtendremos objetos usando Dispatch(). La función Dispatch() acepta una Outlook.Application, y llamaremos a GetNameSpace(), que toma una API llamada MAPI.

En la siguiente línea, creamos otra variable llamada MY_Inbox, luego llamaremos My_OL_App.GetDefaultFolder() y almacenará los datos que se obtienen de la aplicación Outlook. Ahora colocamos 6 dentro del paréntesis, lo que denota la carpeta de la bandeja de entrada.

Los números denotan diferentes tipos de carpetas; por ejemplo, 5 denota el elemento enviado y, de manera similar, para los elementos eliminados, para los elementos archivados. Tenemos una lista de diferentes números que denotan carpetas que se han mencionado en este enlace, puede consultarlo si desea recorrer cualquier otra carpeta.

My_OL_App = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
MY_Inbox = My_OL_App.GetDefaultFolder(6)

Tendremos acceso a toda la bandeja de entrada al llamar a Elementos para almacenar mensajes obtenidos o diferentes correos electrónicos, y lo almacenaremos en la variable MY_ib_items. Crearemos otra variable llamada Msg, luego llamaremos a MY_ib_items.GetLast(), que obtendrá el último correo electrónico.

MY_ib_items = MY_Inbox.Items
Msg = MY_ib_items.GetLast()

Si desea recorrer todos los correos electrónicos, se lo mostraremos más adelante en este tutorial. Ahora, podemos imprimir el SenderName, Subject y body usando el siguiente código.

Asegúrese de que su correo electrónico esté conectado con la aplicación de Outlook.

print(Msg.SenderName)
print(Msg.Subject)
print(Msg.body)

Filtrar correos electrónicos con propiedades

Ahora veremos cómo filtrar correos electrónicos eligiendo las propiedades del mensaje de correo como Nombre del remitente, Asunto, etc. Hemos visto cómo leer el correo electrónico más nuevo usando el método GetLast() desde la aplicación de Outlook.

También veremos cómo extraer los correos electrónicos más nuevos y más antiguos de la aplicación Outlook. Ya que hemos aprendido cómo crear una instancia de Outlook, lo que significa que estamos cargando Outlook en la memoria y estamos familiarizados con el siguiente código.

import win32com.client as client

My_OL_App = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
# MY_Inbox=My_OL_App.GetDefaultFolder(6)
MY_Inbox = My_OL_App.Folders("your email@gmail.com").Folders(
    "Inbox"
)  # When you two or multiple mail boxes
MY_ib_items = MY_Inbox.Items

Puede tener dos buzones de correo diferentes, por lo que cuando desee leer varios buzones de Outlook, puede definir el buzón y la carpeta que desea cargar en su variable. El código anterior es el mismo en lugar de esta línea de código; si solo tiene un buzón, no necesita poner el siguiente código.

MY_Inbox = My_OL_App.Folders("your email@gmail.com").Folders("Inbox")

Podemos poner la dirección de correo electrónico relevante conectada a su aplicación de Outlook. Podemos extraer todos los elementos de la bandeja de entrada usando la propiedad Elementos, que será una colección, y luego podemos recorrer estos elementos uno por uno.

Al hacer un bucle en estos elementos, estamos cargando correos electrónicos desde el buzón uno por uno. Filtraremos los correos electrónicos utilizando la propiedad Asunto, y el ciclo iterará a través de la bandeja de entrada y luego verificará si el asunto del correo electrónico coincide.

for msg in MY_ib_items:
    if "n case you're wondering what's going on" in str(msg.Subject):
        print(msg.SenderName)
        print(msg.Subject)
        print(msg.body)

Puede filtrar correos electrónicos usando diferentes propiedades como; SenderEmailAddress y SenderName, o puede definir condiciones con múltiples propiedades en una sola declaración if.

if (
    "n case you're wondering what's going on" in str(msg.Subject)
    and msg.SenderEmailAddress == "emailaddress"
):
    pass

Hay una propiedad más llamada ReceivedTime, por lo que si desea filtrar correos electrónicos utilizando la fecha y la hora en que se recibió este correo electrónico, así es como también puede usar esta propiedad. Encuentre más propiedades aquí(https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties “LCO”) y visite aquí(https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties “LCO”) para leer más soluciones.

Código fuente completo:

# import win32com.client as client

# My_OL_App = client.Dispatch('Outlook.Application').GetNameSpace('MAPI')
# MY_Inbox=My_OL_App.GetDefaultFolder(6)

# MY_ib_items=MY_Inbox.Items
# Msg=MY_ib_items.GetLast()

# print(Msg.SenderName)
# print(Msg.Subject)
# print(Msg.body)

# Filter Emails With Properties

import win32com.client as client

My_OL_App = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
MY_Inbox = My_OL_App.GetDefaultFolder(6)
MY_Inbox = My_OL_App.Folders("your email@gmail.com").Folders(
    "Inbox"
)  # When you two or multiple mail boxes
MY_ib_items = MY_Inbox.Items

for msg in MY_ib_items:
    if "n case you're wondering what's going on" in str(msg.Subject):
        print(msg.SenderName)
        print(msg.Subject)
        print(msg.body)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn