es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo imprimir un correo electrónico de Outlook?

Después de abrir un correo de Outlook, necesito imprimir el cuerpo. Aquí está el código:

import win32com.client as client

outlook = client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)

messages = inbox.Items
print(inbox.Items.Count)
print(inbox.Parent.Name)
for i in range(5):
    message = messages.GetNext()
    print("" + message.Subject, str(message.ReceivedTime))
    print(message.Body)

Y el error es el siguiente:

“`

<blockquote>
Traceback (most recent call last):
File "c:/Users/source/repos/Tests/pru.py", line 12, in <module>
print(message.Body)
File "C:\Users\venvs\frameworkenv\lib\site-packages\win32com\client__init__.py", line 583, in <strong>getattr</strong>
return self.<em>ApplyTypes</em>(*args)
File "C:\Users\venvs\frameworkenv\lib\site-packages\win32com\client__init__.py", line 572, in _ApplyTypes_
self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
pywintypes.com_error: (-2147467260, 'Operación cancelada', None, None)
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que hubo un error con la operación y que fue abortada. Parece estar relacionado con el acceso al cuerpo del mensaje. Una posible solución sería verificar si el mensaje tiene un cuerpo antes de intentar imprimirlo. Aquí tienes un fragmento de código actualizado:

    import win32com.client as cliente
    
    outlook = cliente.Dispatch("Outlook.Application").GetNamespace("MAPI")
    bandeja_entrada = outlook.GetDefaultFolder(6)
    
    mensajes = bandeja_entrada.Items
    print(bandeja_entrada.Items.Count)
    print(bandeja_entrada.Parent.Name)
    
    for i in range(5):
        mensaje = mensajes.GetNext()
        print(f"{mensaje.Subject} - {mensaje.ReceivedTime}")
    
        if mensaje.Body:
            print(mensaje.Body)
    

    En este código actualizado, agregamos una declaración “if” para verificar si el mensaje tiene un cuerpo antes de intentar imprimirlo. Esto debería ayudar a evitar el mensaje de error.

Comments are closed.