Lire les e-mails Outlook avec Python

Je veux automatiser le travail analogique

Dans mon travail quotidien, c'est un super analogue qui copie le "numéro de demande", "titre de la demande", "URL", "date de réception", etc. dans le courrier reçu par Outlook vers le tableau de gestion (Excel) stocké dans le serveur. Il y a du travail.

Je me suis demandé si je pouvais en quelque sorte automatiser cette tâche, alors je vais commencer par ** lire l'e-mail que j'ai reçu dans Outlook avec Python **.

J'ai fait beaucoup de recherches, mais je n'avais pas beaucoup d'informations et j'ai réussi à le faire par essais et erreurs, je vais donc laisser les informations sous forme de mémorandum. (Le bureau de ma maison est très ancien et Outlook 2007 ... Je pense que c'est probablement la même chose avec le dernier Office, mais pardonnez-moi si cela ne fonctionne pas.)

Le code final est très simple.

Lire les e-mails Outlook avec Python

supposition

En principe, mon dossier de messagerie Outlook ressemble à ceci.

outlook_folders.png

D'une manière générale

  1. Dossier personnel
  2. Dossier de messagerie Yahoo Il y en a, et il est divisé en plusieurs dossiers.

Cette fois, supposons que vous souhaitiez lire le courrier ** dans la "Boîte de réception" de ** "2. Dossier de compte Yahoo Mail".

Charger le dossier

Vous devez importer win32com.client pour travailler avec Outlook. J'utilise Anaconda et j'ai pu l'importer sans aucune installation supplémentaire.


import win32com.client

Créez ensuite un objet Outlook.


outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

Cet objet appelé outlook possède un attribut appelé Dossiers, qui correspond à "1. Dossier personnel" et "2. Dossier de compte de messagerie Yahoo".

accounts = outlook.Folders
for account in accounts:
    print(account)

résultat

Dossier personnel
**********@yahoo.co.jp

Ce compte a également un attribut appelé Dossiers, qui correspond aux dossiers de la hiérarchie inférieure.

Pour résumer jusqu'à présent


print("root (Nombre de comptes=%d)" % accounts.Count)
for account in accounts:
    print("└ ",account)
    folders = account.Folders
    for folder in folders:
        print("  └ ",folder)

Résultat d'exécution

root (Nombre de comptes=2)
└ Dossier personnel
└ Éléments supprimés
└ Boîte de réception
└ Boîte d'envoi
└ Éléments envoyés
└ Calendrier
└ Coordonnées
└ Histoire
└ Mémo
└ Travail
└ Brouillon
└ Flux RSS
└ Courrier indésirable
└  **********@yahoo.co.jp
└ Boîte de réception
  └  Bulk Mail
  └  Draft
  └  Sent
  └  Trash

En plus, c'est simple.

Lire le courrier

Le courrier réel est contenu dans le dossier finalement obtenu, mais ce dossier a un attribut appelé Items, qui correspond à "mail".

Les mails obtenus à partir d'éléments sont des objets itérables, utilisez donc l'instruction for pour les récupérer un par un.


mails = folder.Items
for mail in mails:
    print("matière: " ,mail.subject)
    print("De: %s [%s]" % (mail.sendername, mail.senderEmailAddress))
    print("Date et heure de réception: ", mail.receivedtime)
    print("Non lu: ", mail.Unread)
    print("Texte: ", mail.body)
attribut sens
mail.subject matière
mail.sendername Du nom
mail.senderEmailAddress Adresse e-mail de l'expéditeur
mail.receivedtime Date et heure de réception
mail.body Texte
mail.Unread Indicateur non lu

Ensuite, vous pouvez voir que le contenu du courrier peut être obtenu comme ceci.

matière:C'est un test
De: *** [*******@gmail.com]
Date et heure de réception:  2020-05-30 07:17:33+00:00
Non lu:  False
Texte:Le recevez-vous correctement?

Résumé

Enfin, je vais résumer le code.


import win32com.client

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

accounts = outlook.Folders

print("root (Nombre de comptes=%d)" % accounts.Count)
for account in accounts:
    print("└ ",account)
    folders = account.Folders
    for folder in folders:
        print("  └ ",folder)
        mails = folder.Items
        for mail in mails:
            print("-----------------")
            print("matière: " ,mail.subject)
            print("De: %s [%s]" % (mail.sendername, mail.senderEmailAddress))
            print("Date et heure de réception: ", mail.receivedtime)
            print("Non lu: ", mail.Unread)
            print("Texte: ", mail.body)

Résultat d'exécution

root (Nombre de comptes=2)
└ Dossier personnel
└ Éléments supprimés
└ Boîte de réception
└ Boîte d'envoi
└ Éléments envoyés
└ Calendrier
└ Coordonnées
└ Histoire
└ Mémo
└ Travail
└ Brouillon
└ Flux RSS
└ Courrier indésirable
└  **********@yahoo.co.jp
└ Boîte de réception

-----------------
matière:C'est un test
De: *** [*******@gmail.com]
Date et heure de réception:  2020-05-30 07:17:33+00:00
Non lu:  False
Texte:Le recevez-vous correctement?

Recommended Posts

Lire les e-mails Outlook avec Python
Lire DXF avec python
Lire la formule d'Euler en Python
Envoyer des e-mails avec Python (Outlook)
Lire du XML avec un espace de noms spécifié en Python
Lire la sortie Fortran avec python
Lire des morceaux PNG en Python (édition de classe)
Lire des fichiers en parallèle avec Python
Créer et lire des paquets de messages en Python
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Plink en Python
Constante en Python
Lire et écrire des fichiers JSON avec Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
[Python] Lire la ligne spécifiée dans le fichier
Hashable en Python
DirectLiNGAM en Python
Lire des caractères dans des images avec Python OCR
LiNGAM en Python
Aplatir en Python
[python] Lecture de données
Aplatir en python
Lire un fichier contenant des lignes brouillées en Python
Lire les données de la table dans un fichier PDF avec Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python