Portocole IMAP: Pb pour récupérer un attacment avec l'extension .XLS qui est au format XML
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:
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.