2009-01-13 10 views
4

J'utilise CDO (Collaboration Data Objects) de Microsoft pour lire par programme des messages à partir d'une boîte aux lettres Outlook et enregistrer des pièces jointes d'images incorporées. J'essaye de faire ceci à partir de Python en utilisant les extensions Win32, mais des exemples dans n'importe quel langage utilisant CDO seraient utiles.Extraction d'images incorporées à partir d'Outlook Email

Jusqu'à présent, je suis ici ...

Le code Python suivant lira le dernier e-mail dans ma boîte aux lettres, imprimer les noms des pièces jointes et imprimer le corps du message:

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() 

Cependant, les noms de pièces jointes sont des choses comme: "zesjvqeqcb_chart_0". A l'intérieur de la source e-mail, je vois l'image liens source comme ceci: < IMG src = "cid: zesjvqeqcb_chart_0" >

Alors, est-il possible d'utiliser cette URL CID (ou autre) pour extraire l'image réelle et économisez -t-il localement?

différence

Répondre

5

dans les versions OS/Outlook/CDO est ce qui pourrait être source de confusion, alors voici les étapes pour le faire fonctionner sur Windows XP/Outlook 2007/CDO 1.21:

  • installer CDO 1.21
  • installer win32com.client
  • goto C: \ Python25 \ Lib \ site-packages \ win32com \ Run répertoire client \ suivantes:
python makepy.py
  • sélectionnez dans la liste "Microsoft CDO 1.21 Library (1,21)", cliquez sur OK
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
  • fichier examen 3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x33.py qui vient d'être généré, sera vous donner une idée des classes, méthodes, propriétés et constantes disponibles.

Maintenant que nous avons fini avec les étapes ennuyeuses, voici la partie amusante:

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() 

Même approche générale travaillera également si vous avez une version plus ancienne de CDO (CDO pour Win2K)

+0

J'essaye ceux dans le code ci-dessus et cela ne fonctionne pas. Je ne vois pas cette méthode et cette propriété dans mon objet de pièce jointe. des idées? –

+0

besoin d'utiliser GetDecodedContentStream J'ai modifié la réponse –

+0

dans le code abocve, je reçois toujours "AttributeError: .GetDecodedContentStream" lorsque vous essayez d'appeler cette méthode. Il ne peut également pas voir la propriété FileName. Un conseil sur la façon d'utiliser cette interface à partir de mon code Python ci-dessus? –

Questions connexes