Frage

Ich bin mit Microsoft CDO (Collaboration Data Objects) programmatisch Mail von einem Outlook-Postfach lesen und eingebettete Bild-Anhänge speichern. Ich versuche, dies von Python zu tun, um die Win32-Erweiterungen verwenden, aber Proben in jeder Sprache, die CDO verwendet wäre hilfreich.

So weit, ich bin hier ...

Der folgende Python-Code wird die letzte E-Mail in meinem Postfach lesen, die Namen der Anhänge drucken, und den Nachrichtentext drucken:

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

Allerdings sind die Anlagennamen Dinge wie: „zesjvqeqcb_chart_0“. Innerhalb der E-Mail-Quelle, sehe ich Bildquelle Links wie folgt aus:

So

, ist es möglich, diese CID-URL zu verwenden (oder etwas anderes), um das aktuelle Bild zu extrahieren und lokal speichern?

War es hilfreich?

Lösung

Unterschied in Versionen von OS / Outlook / CDO ist, was könnte die Quelle der Verwirrung sein, so sind hier die Schritte, die sie auf WinXP / Outlook 2007 / CDO 1.21 arbeiten zu bekommen:

  • CDO 1.21
  • installieren win32com.client
  • gehe zu C: \ Python25 \ Lib \ site-packages \ win32com \ \ Verzeichnis Client den folgenden:
python makepy.py
  • aus der Liste wählen Sie "Microsoft CDO 1.21 Library (1.21)", klicken Sie auf 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
  • Datei 3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x33.py Untersuchen, die erzeugt gerade ist, wird Ihnen eine Vorstellung davon, was Klassen, Methoden, Eigenschaften und Konstanten zur Verfügung.

Jetzt, da wir mit den langweiligen Schritte erfolgt sind, hier ist der spaßige Teil:

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

Die gleiche allgemeiner Ansatz wird auch funktionieren, wenn Sie ältere Version von CDO (CDO für win2k) haben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top