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?