Exporter Gmail à l'aide de Python Imaplib - texte mutilé avec des problèmes de nouvelle ligne

StackOverflow https://stackoverflow.com/questions/8394201

  •  28-10-2019
  •  | 
  •  

Question

J'utilise le code suivant pour exporter tous les e-mails dans un dossier Gmail spécifique.

Cela fonctionne bien, en ce qu'il retire tous les e-mails que j'attends, mais il (ou moi) semble gaspiller l'encodage pour CR / Newlines.

Code:

import imaplib
import email
import codecs
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('myUser@gmail.com', 'myPassword')  #user / password
mail.list()
mail.select("myFolder") # connect to folder with matching label

result, data = mail.uid('search', None, "ALL") # search and return uids instead
i = len(data[0].split())

for x in range(i):
    latest_email_uid = data[0].split()[x]
    result, email_data = mail.uid('fetch', latest_email_uid, '(RFC822)')
    raw_email = email_data[0][1]
    email_message = email.message_from_string(raw_email)
    save_string = str("C:\\\googlemail\\boxdump\\email_" + str(x) + ".eml") #set to   save location
    myfile = open(save_string, 'a')
    myfile.write(email_message)
    myfile.close()

Mon problème est qu'au moment où j'arrive à l'objet, il est jonché de «= 0a», ce que je suppose sont incorrectement interprétés sur un drapeau de retour sur la ligne ou le chariot.

Je peux le trouver en hexadécimal, [d3 03 03 0a] mais parce que ce ne sont pas des «personnages», je ne trouve aucun moyen pour str.replace () de retirer les pièces. Je ne veux pas vraiment les drapeaux de Newline.

Je pourrais convertir toute la chaîne en hex

Ce que je vois:

====
CAUTION:  This email message and any attachments con= tain information that may be confidential and may be LEGALLY PRIVILEGED. If yo= u are not the intended recipient, any use, disclosure or copying of this messag= e or attachments is strictly prohibited. If you have received this email messa= ge in error please notify us immediately and erase all copies of the message an= d attachments. Thank you.
==== 

ce que je veux:

====
CAUTION:  This email message and any attachments contain information that may be confidential and may be LEGALLY PRIVILEGED. If you are not the intended recipient, any use, disclosure or copying of this message or attachments is strictly prohibited. If you have received this email message in error please notify us immediately and erase all copies of the message and attachments. Thank you.
====  
Était-ce utile?

La solution

Ce que vous regardez est Cité imprimable codage.

Essayez de changer:

email_message = email.message_from_string(raw_email)

à:

email_message = str(email.message_from_string(raw_email)).decode("quoted-printable")

Pour plus d'informations, voir Encodages standard Dans le module Python Codecs.

Autres conseils

Seulement 2 articles supplémentaires ayant pensé à la douleur de cela pendant une journée. Je le fais au niveau de la charge utile afin que vous puissiez traiter votre email_message pour obtenir des adresses e-mail, etc. à partir de votre courrier.

2 Vous devez également décoder l'ensemble du Charset, j'ai eu des problèmes avec les personnes copiant et coller HTML à partir de pages Web et de contenu de Word Docs, etc. dans des e-mails que j'essayais ensuite de traiter.

if maintype == 'multipart':
                    for part in email_message.get_payload():
                            if part.get_content_type() == 'text/plain':
                                text += part.get_payload().decode("quoted-printable").decode(part.get_content_charset())

J'espère que cela aide quelqu'un!

Dave

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top