On Oct 20, 9:01 am, John Henry <john106he...@hotmail.com> wrote: > On Oct 20, 1:41 am, Tim Golden <m...@timgolden.me.uk> wrote: > > > > > On 19/10/2010 22:48, John Henry wrote: > > > > Looks like this flag is valid only if you are getting messages > > > directly from Outlook. When reading the msg file, the flag is > > > invalid. > > > > Same issue when accessing attachments. In addition, the MAPITable > > > method does not seem to work at all when trying to get attachments out > > > of the msg file (works when dealing with message in an Outlook > > > mailbox). Eitherway, the display_name doesn't work when trying to > > > display the filename of the attachment. > > > > I was able to get the date by using the PR_TRANSPORT_MESSAGE_HEADERS > > > mapitags > > > Ah, thanks. As you will have realised, my code is basically geared > > to reading an Outlook/Exchange message box. I hadn't really tried > > it on individual message files, except my original excerpt. If it > > were opportune, I'd be interested in seeing your working code. > > > TJG > > When (and if) I finally figure out how to get it done, I surely will > make the code available. It's pretty close. All I need is to figure > out how to extract the attachments. > > Too bad I don't know (and don't have) C#. This guy did it so cleanly: > > http://www.codeproject.com/KB/office/reading_an_outlook_msg.aspx?msg=... > > May be somebody that knows both C# and Python can convert the code > (not much code) and then the Python community will have it. As it > stands, it seems the solution is available in Java, C#, VB .... but > not Python.
BTW: For the benefit of future search on this topic, with the code listed above where: storage_flags = STGM_DIRECT | STGM_READ | STGM_SHARE_EXCLUSIVE I had to change it to: storage_flags = STGM_DIRECT | STGM_READ | STGM_SHARE_DENY_NONE | STGM_TRANSACTED otherwise I get a sharing violation (see http://efreedom.com/Question/1-1086814/Opening-OLE-Compound-Documents-Read-StgOpenStorage). For now, I am using a brute force method (http://mail.python.org/ pipermail/python-win32/2009-February/008825.html) to get the names of the attachments and if I need to extract the attachments, I pop up the message in Outlook and let Outlook extract the files. Ugly but fits my client's need for now. Hopefully there will be a cleaner solution down the road. Here's my code for brute forcing attachments out of the msg file (very ugly): def get_attachments(self, fileID): #from win32com.storagecon import * from win32com import storagecon import pythoncom flags = storagecon.STGM_READ | storagecon.STGM_SHARE_DENY_NONE | storagecon.STGM_TRANSACTED try: storage = pythoncom.StgOpenStorage (fileID, None, flags) except: return [] flags = storagecon.STGM_READ | storagecon.STGM_SHARE_EXCLUSIVE attachments=[] for data in storage.EnumElements (): print data[0], data[1] if data[1] == 2 or data[0] == "__substg1.0_007D001F": stream = storage.OpenStream (data[0], None, flags) try: msg = stream.Read (data[2]) except: pass else: msg = repr (msg).replace("\ \x00","").strip("'").replace("%23","#") if data[0] == "__substg1.0_007D001F": try: attachments.append(msg.split("name=\"")[1].split("\"")[0]) except: pass return attachments -- http://mail.python.org/mailman/listinfo/python-list