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:
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)
J'ai cherché différentes solutions, mais rien n'y fait.

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