Exemple de gestion des fichiers eml en Python

Si vous utilisez le package email de Python, le fichier eml qui peut enregistrer les e-mails n'est qu'une bibliothèque standard. C'est facile à analyser.

Obtenez le fichier joint, le sujet, le corps, etc. du fichier eml, bien que ce soit le minimum car il est nécessaire pour les affaires. J'ai fait un cours.


# coding:utf-8
"""
Obtenez des données basées sur un fichier eml pour une manipulation facile
échantillon.

Il peut y avoir des omissions en raison de la mise en œuvre minimale. .. ..

"""
import sys
import email
from email.header import decode_header

class MailParser(object):
    """
Une classe qui reçoit le chemin d'un fichier courrier et l'analyse
    """

    def __init__(self, mail_file_path):
        self.mail_file_path = mail_file_path
        #email du fichier eml.message.Obtenir l'instance de message
        with open(mail_file_path, 'rb') as email_file:
            self.email_message = email.message_from_bytes(email_file.read())
        self.subject = None
        self.to_address = None
        self.cc_address = None
        self.from_address = None
        self.body = ""
        #Informations relatives aux pièces jointes
        # {name: file_name, data: data}
        self.attach_file_list = []
        #Interprétation de eml
        self._parse()

    def get_attr_data(self):
        """
Obtenir des données de messagerie
        """
        result = """\
FROM: {}
TO: {}
CC: {}
-----------------------
BODY:
{}
-----------------------
ATTACH_FILE_NAME:
{}
""".format(
            self.from_address,
            self.to_address,
            self.cc_address,
            self.body,
            ",".join([ x["name"] for x in self.attach_file_list])
        )
        return result


    def _parse(self):
        """
Analyse des fichiers courrier
        __init__Appeler
        """
        self.subject = self._get_decoded_header("Subject")
        self.to_address = self._get_decoded_header("To")
        self.cc_address = self._get_decoded_header("Cc")
        self.from_address = self._get_decoded_header("From")

        #Traitement de la partie du corps du message
        for part in self.email_message.walk():
            #Si le ContentType est en plusieurs parties, le contenu réel est encore plus
            #Puisqu'il est dans la partie intérieure, sautez-le
            if part.get_content_maintype() == 'multipart':
                continue
            #Obtenir le nom du fichier
            attach_fname = part.get_filename()
            #Doit être le corps s'il n'y a pas de nom de fichier
            if not attach_fname:
                charset = str(part.get_content_charset())
                if charset:
                    self.body += part.get_payload(decode=True).decode(charset, errors="replace")
                else:
                    self.body += part.get_payload(decode=True)
            else:
                #S'il y a un nom de fichier, c'est un fichier joint
                #Obtenez des données
                self.attach_file_list.append({
                    "name": attach_fname,
                    "data": part.get_payload(decode=True)
                })

    def _get_decoded_header(self, key_name):
        """
Obtenez le résultat décodé à partir de l'objet d'en-tête
        """
        ret = ""

        #Les clés qui n'ont pas l'élément correspondant renvoient des caractères vides
        raw_obj = self.email_message.get(key_name)
        if raw_obj is None:
            return ""
        #Rendre le résultat décodé unicode
        for fragment, encoding in decode_header(raw_obj):
            if not hasattr(fragment, "decode"):
                ret += fragment
                continue
            #S'il n'y a pas d'encodage, UTF pour le moment-Décoder avec 8
            if encoding:
                ret += fragment.decode(encoding)
            else:
                ret += fragment.decode("UTF-8")
        return ret

if __name__ == "__main__":
    result = MailParser(sys.argv[1]).get_attr_data()
    print(result)

Pour le moment, les résultats attendus ont été obtenus. J'espère que cela vous sera utile pour gérer les e-mails.

Recommended Posts

Exemple de gestion des fichiers eml en Python
Gestion des fichiers JSON en Python
Tapez les annotations pour Python2 dans les fichiers stub!
Manipulation de json en python
Comment gérer l'hexadécimal en Python3
Exemple de code spécifique pour travailler avec SQLite3 en Python
Techniques de tri en Python
[Python] Exemple de code pour la grammaire Python
Recherche récursive de fichiers et de répertoires en Python et sortie
Traitement des URL relatives en python
À propos de "for _ in range ():" de python
Translocation de fichiers CSV avec Python Partie 1
Rechercher les fuites de mémoire dans Python
Manipuler des fichiers et des dossiers en Python
Téléchargez des fichiers Google Drive en Python
Gestion des fuseaux horaires en Python (datetime, pytz)
Lire des fichiers en parallèle avec Python
Exporter et exporter des fichiers en Python
Exécutez unittest en Python (pour les débutants)
Extraire des chaînes de fichiers avec Python
Exemple d'API Google Cloud Vision pour python
Trouver des fichiers comme Linux Find en Python
Arborescence de sortie des fichiers en Python
Note de nfc.ContactlessFrontend () de nfcpy de python
Inject est recommandé pour DDD en Python
Conseils pour gérer les binaires en Python
Exemple de script pour piéger les signaux en Python
Résumé de diverses instructions for en Python
Modèle pour l'écriture de scripts batch en python
Automatisez les tâches en manipulant des fichiers en Python
Traiter plusieurs listes avec for en Python
MongoDB avec Python pour la première fois
Lire et écrire des fichiers JSON avec Python
Obtenez un jeton pour conoha avec python
Fiche de triche AtCoder en python (pour moi-même)
J'ai cherché un nombre premier avec python
Remarques sur l'utilisation de python (pydev) avec eclipse
Conseils pour créer de petits outils avec python
Utilisez pathlib dans Maya (Python2.7) en préparation du prochain Python3.7
Téléchargez des fichiers dans n'importe quel format en utilisant Python
Importation de modules et gestion des exceptions en python
Modèle pour créer des applications de ligne de commande en Python
Quadtree en Python --2
Python en optimisation
python [pour moi]
CURL en Python
CERTIFICATE_VERIFY_FAILED dans Python 3.6, le programme d'installation officiel de macOS
++ et-ne peuvent pas être utilisés pour incrémenter / décrémenter en python
Géocodage en python
SendKeys en Python
[Python] Récupérez les fichiers dans le dossier avec Python
Méta-analyse en Python
Unittest en Python
Résumé de la façon d'importer des fichiers dans Python 3
Résoudre l'erreur d'écriture japonaise UnicodeEncodeError dans le fichier Python
Exemple de fermeture Python
Époque en Python
Discord en Python
Ajouter un devis ">" pour répondre aux e-mails en Python3