python email outlook cdo.message

python - Extraer imágenes incrustadas del correo electrónico de Outlook



email cdo.message (1)

La diferencia en las versiones de OS / Outlook / CDO es lo que podría ser la fuente de confusión, así que aquí están los pasos para hacerlo funcionar en WinXP / Outlook 2007 / CDO 1.21:

  • instalar CDO 1.21
  • instalar win32com.client
  • Vaya al directorio C: / Python25 / Lib / site-packages / win32com / client / ejecute lo siguiente:

python makepy.py

  • de la lista, seleccione "Microsoft CDO 1.21 Library (1.21)", haga clic en Aceptar

C:/Python25/Lib/site-packages/win32com/client>python makepy.py Generating to C:/Python25/lib/site-packages/win32com/gen_py/3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x33.py Building definitions from type library... Generating... Importing module

  • Examinando el archivo 3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x33.py que acaba de generarse, le dará una idea de qué clases, métodos, propiedades y constantes están disponibles.

Ahora que hemos terminado con los pasos aburridos, aquí está la parte divertida:

import win32com.client from win32com.client import Dispatch session = Dispatch(''MAPI.session'') session.Logon (''Outlook'') # this is profile name inbox = session.Inbox messages = session.Inbox.Messages message = inbox.Messages.GetFirst() if(message): attachments = message.Attachments for i in range(attachments.Count): attachment = attachments.Item(i + 1) # yep, indexes are 1 based filename = "c://tmpfile" + str(i) attachment.WriteToFile(FileName=filename) session.Logoff()

El mismo enfoque general también funcionará si tiene una versión anterior de CDO (CDO para win2k)

Estoy utilizando el CDO (Collaboration Data Objects) de Microsoft para leer correos de forma programática desde un buzón de Outlook y guardar archivos adjuntos de imágenes incrustadas. Estoy tratando de hacer esto desde Python usando las extensiones de Win32, pero las muestras en cualquier idioma que use CDO serían útiles.

Hasta ahora, estoy aquí ...

El siguiente código de Python leerá el último correo electrónico en mi buzón, imprimirá los nombres de los archivos adjuntos e imprimirá el cuerpo del mensaje:

from win32com.client import Dispatch session = Dispatch(''MAPI.session'') session.Logon('''','''',0,1,0,0,''exchange.foo.com/nbar''); inbox = session.Inbox message = inbox.Messages.Item(inbox.Messages.Count) for attachment in message.Attachments: print attachment print message.Text session.Logoff()

Sin embargo, los nombres de los archivos adjuntos son cosas como: "zesjvqeqcb_chart_0". Dentro de la fuente del correo electrónico, veo enlaces de origen de imagen como este: <IMG src = "cid: zesjvqeqcb_chart_0">

Entonces, ¿es posible usar esta URL CID (o cualquier otra cosa) para extraer la imagen real y guardarla localmente?