Mardi 26 05 2020 - lmichel/vo-grimoire GitHub Wiki

Mardi 26/05/2020

Activités Réalisées :

  • Travail de recherche et debugage pour Perceval
  • Remplacement de Perceval par Mailbox-py
  • Parcours des attachements et ajout dans un dictionnaire pour l'indexage
  • Premier test d'affichage d'une pièce jointe sur le site web

Approfondissement Activités :

Travail de recherche et débugage pour Perceval :

Pour voir si Perceval trouvait bien les pièces jointes pour chaque mail, je suis passé par les fichiers sources de Perceval pour voir ce qu'il en retournait.

Perceval ignore toutes les parties du mail qui ne sont pas son contenu texte, ce qui fait que toutes les pièces jointes ne sont jamais prises en compte.

Suite à ça, j'ai décidé d'abandonner Perceval et d'utiliser le module mailbox disponible dans les librairies python.

Remplacement de Perceval par Mailbox-py

J'ai donc supprimé Perceval pour importer Mailbox et l'utiliser à part entière.

La structure des dictionnaires n'étant pas foncièrement différentes, les modifications étaient plutôt simples, mais quelques mails avaient des problèmes d'encodage que j'ai résolu avec des combinaisons de encode/decode.

Ce n'est que mon impression personnelle, mais j'ai l'impression que le parcours de chaque fichier mbox est plus rapide qu'avec Perceval, mais ce n'est qu'un avis subjectif.

Parcours des attachements et ajout dans un dictionnaire pour l'indexage

Un mail contient des pièces jointes si la méthode get_content_maintype() retourne 'multipart'.

C'est à ce moment qu'on peut parcourir toutes les parties du mail avec message.walk()

A partir de ce moment on retrouve tout les formats de fichiers : application/pdf , application/docx, image/png à l'aide de la méthode get_payload() dans la méthode walk().

A chaque parcours, j'ajoute dans un dictionnaire le type (part.get_content_type()) de la pièce jointe si elle n'est pas le contenu du message.

Donc maintenant, chaque élément dans Elastic Search contient un champ "attachements" qui est un dictionnaire regroupant toutes les pièces jointes de la forme suivante :

  • key : Eg : application/pdf : c'est donc le format de la pièce jointe
  • value : Représentation en base 64 de la pièce jointe.

Premier test d'affichage d'une pièce jointe sur le site web

Pour tester le fonctionnement du nouvel indexage, j'ai essayé d'afficher dans une nouvelle fenêtre le pdf d'un mail, et à la fin d'un mail l'image en pièce jointe.

Pour cela, j'ajoute un iframe au Dom pour ouvrir un nouvel onglet ou j'ajoute un img pour l'image.

Ensuite, pour permettre à Javascript de transcrire le code en base 64 en image j'utilise la méthode encodeURI()

Commentaire Personnels :

Je suis content d'avoir réussi rapidement à "parser" les pièces jointes, mais le travail restant s'avère long car ce sera au cas par cas.

J'ai désactivé l'affichage des pièces jointes pour l'instant pour une meilleure implémentation (toujours en cours de développement), j'ai des erreurs 400 pour aucune raison ce qui fait que certaines fois, les images ne s'affichaient plus.