Bonjour à tous,
J'ai le problème suivant:
Je reçois un mail contenant des mails en attachment.
Ces mails joints contiennent les informations que je dois traiter, et ce traitement est automatisé.
Je souhaiterais automatiser la sauvegarde de ces attachments.
Basé sur différentes sources trouvées sur le Web, et notamment cdo, j'ai le code suivant. (voir en fin de post)
Pour tout attachment de type .jpg, .py, etc..., càd autre qu'un mail joint, aucun problème. Le fichier est correctement sauvé.
Mais dans le cas d'un mail, j'ai l'exception suivante:
J'ai cherché différentes solutions, mais rien n'y fait.Traceback (most recent call last):
File "C:\Workspaces\JunkRoom\src\OutlookConnect.py", line 25, in ?
attachment.WriteToFile(filename)
File "C:\Python23\lib\site-packages\win32com\gen_py\3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x21\Attachment.py", line 49, in WriteToFile
return self._ApplyTypes_(133, 1, (12, 0), ((12, 1),), 'WriteToFile', None,FileName
File "C:\Python23\lib\site-packages\win32com\client\__init__.py", line 446, in _ApplyTypes_
return self._get_good_object_(
pywintypes.com_error: (-2147352567, 'Exception occurred.', (1258, 'Collaboration Data Objects', ' [Collaboration Data Objects - [MAPI_E_NO_SUPPORT(80040102)]]', None, 0, -2147221246), None)
Quelqu'un aurait-il une autre approche/solution?
Merci d'avance,
Gérald
Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 import win32com.client from win32com.gen_py import * import win32com.gen_py session = win32com.client.gencache.EnsureDispatch ("MAPI.Session") session.Logon ("Default Outlook Profile") messages = session.Inbox.Messages message = messages.GetFirst () c = 0 while message: print "-----------------------------------------------------------------" c = c +1 print message.Subject attachments = message.Attachments for i in range(attachments.Count): attachment = attachments.Item(i + 1) # indexes are 1 based if attachment != None: print "Attachment type: " + str(attachment.Type) filename = 'c:\\temp\\' + attachment.Name if attachment.Type == win32com.client.constants.ActMsgRecipient: print "Message as Attachment " + attachment.Name filename = "c:\\temp\\attachment_" + str(c) + "_" + str(i) + ".msg" print "filename: " + filename attachment.WriteToFile(filename) else: print "--- No attachment" message = messages.GetNext ()
Partager