Bonjour,

Je viens d'effectuer le porting d'un script python qui utilisait la librairie pywin32 et qui était donc dépendant d'un client Outlook vers la librairie IMAPlib, pour rendre le script agnostique du client Outlook via le protole IMAP. Tout fonctionne correctement sauf lorsque je dois travailler avec un mail dont l'attachment à l'extension ".XLS" mais est au format XML. Dans ce cas l'extrait de code suivant considère simplement qu'il n'y a pas d'attachment. Pouvez m'aider svp à faire ensorte que les ".XLS" qui sont en XML soient considérés comme des pièce jointes en tant que telles par le protocole IMAP?

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
 for self.i in tqdm(range(latest_email_id, oldest_email_id -1 , -1)):
                #x = mail[i-1]
                status = ""
                xdeleted = False
                typ, x = self.m.fetch(str(self.i), '(RFC822)')
                raw_email = x[0][1]
                raw_email_string = raw_email.decode()
                email_message = email.message_from_string(raw_email_string)
 
                for response_part in x:
                    if isinstance(response_part, tuple):
                        msg = email.message_from_string(response_part[1].decode())
                #print(x.senton.date())
                #sentondate = pd.to_datetime(x.senton.date())
 
                senderemail = msg['from']
                subject = msg['subject'].replace("\n","").replace("\r","")
                subject, encoding = email.header.decode_header(subject)[0]
                if (encoding == None):
                    subject = subject
                else:
                    subject = subject.decode(encoding)
 
                print("subject:", subject)
                attachmentsfilenamesconcat = ""
                attachments = []
                for part in email_message.walk():
                    if part.get_content_maintype() == 'multipart':
                        continue
                    if part.get('Content-Disposition') is None:
                        continue
                    print("HEREHEHE")
                    fileName, encoding = decode_header(str(part.get_filename()))[0]
                    if (encoding is None):
                        fileName = fileName.replace("\r","").replace("\n","")
                    else:
                        fileName = fileName.decode(encoding).replace("\r","").replace("\n","")
                    print("ATTACHMENT FILENAME:", fileName)
                    attachments.append(fileName)
                    if bool(fileName):
                        fnwoext, file_extension = os.path.splitext(os.path.join(self.DIR_ATT, fileName))
                        if ((file_extension.lower() == ".csv") | (file_extension.lower() == ".xls") | (
                                file_extension.lower() == ".xlsx") \
                                | (file_extension.lower() == ".xlsm") | (file_extension.lower() == ".pdf") | (
                                        file_extension.lower() == ".zip") \
                                | (file_extension.lower() == ".txt")):
                            print(os.path.join(self.DIR_ATT, fileName))
 
                            filePath = os.path.join(self.DIR_ATT,fileName)
                            fp = open(filePath, 'wb')
                            fp.write(part.get_payload(decode = True))
                            fp.close()
                            attachmentsfilenamesconcat += fileName + " "
Pour Info lorsque ce code s'éxécute: "HEREHEHE" n'est jamais printé dans le cas du courriel avec l'attachment en XML.