[PYTHON] Convertir un PDF joint en courrier électronique au format texte

Une entreprise m'envoie un e-mail avec un PDF en pièce jointe.

Il est également possible d'utiliser un service de messagerie capable de rechercher des fichiers PDF tels que Gmail, mais je ne voulais pas trop sortir et je voulais le gérer de manière appropriée lorsqu'un mot-clé spécifique était trouvé, j'ai donc essayé pyPdf de Python.

Premier. À partir des paramètres de messagerie. Réglez le logiciel de messagerie que vous utilisez normalement sur "Laisser le courrier sur le serveur" et récupérez le courrier restant sur le serveur avec fetchmail et procmail. Cette fois, j'ai utilisé celui de l'environnement Cygwin et j'ai écrit le fichier de configuration suivant.

.fetchmailrc


defaults
  fetchall
  keep
  mda "/usr/bin/procmail"

poll pop.xxx.com
  protocol pop3
  port 110
  username "XXXXX"
  password "XXXXX"

.procmailrc


MAILDIR=$HOME/Mail/
DEFAULT=/dev/null

:0 H
* ^From:.*[email protected]
/var/spool/mail/t.uehara/

En écrivant ceci, le courrier de test @ example sera stocké dans / var / spool / mail, et les autres courriers seront / dev / null (c'est-à-dire rejetés). Puisqu'il est écrit comme keep du côté fetchmail, il est laissé sur le serveur. L'emplacement de stockage peut être n'importe où, mais il est pratique de le lire avec Mutt, etc., donc je l'ai défini sur / var / spool / mail.

Ensuite, téléchargez pyPdf et installez python setup.py.

http://pybrary.net/pyPdf/

Exemple de programme PyPdf et Exemple d'écriture de pièces jointes à l'aide d'un package de courrier électronique Copiez .html) de manière appropriée et écrivez un script pour générer un fichier PDF et un fichier extrait du fichier PDF dans un dossier approprié.

pdfmail.py


import os
import sys

import email
import mailbox
import mimetypes

import pyPdf

def pdfmail(msgfile):

    fp = open(msgfile)
    msg = email.message_from_file(fp)
    fp.close()

    counter = 1
    for part in msg.walk():
        if part.get_content_maintype() == 'multipart':
            continue
        fname = part.get_filename()
        if not fname:
            ext = mimetypes.guess_extension(part.get_type())
            if not ext:
                ext = '.bin'
            fname = 'part-%03d%s' % (counter, ext)
        counter += 1

        if fname.find('.pdf') != -1:

            print fname

            fp = open('pdf/'+fname, 'wb')
            fp.write(part.get_payload(decode=True))
            fp.close()

            c = getPDFContent('pdf/'+fname).encode("ascii","xmlcharrefreplace")
            fp = open('pdf/'+fname+".txt", 'wb')
            fp.write(c)
            fp.close()
def getPDFContent(path):
    content = ""
    pdf = pyPdf.PdfFileReader(file(path, "rb"))
    for i in range(0, pdf.getNumPages()):
        content += pdf.getPage(i).extractText() + "\n"
    content = " ".join(content.replace(u"\xa0", " ").strip().split())
    return content

if __name__ == '__main__':

    maildir = '/var/spool/mail/t.uehara'
    m = mailbox.Maildir(maildir)
    for key in m.keys():
        pdfmail(maildir+'/new/'+key)

Enfin, créez un fichier batch comme celui-ci et exécutez-le régulièrement avec le planificateur de tâches Windows etc. OK.

pdfmail.bat


C:\cygwin\bin\bash --login -i -c "fetchmail"
C:\cygwin\bin\python2.7.exe pdfmail.py

Recommended Posts

Convertir un PDF joint en courrier électronique au format texte
[Python] Convertir le texte PDF en CSV pour chaque page (2/24 postscript)
Convertir un PDF en documents par OCR
Convertir Markdown en PDF en Python
Convertir un PDF A4 en A3 toutes les 2 pages
Conversion de pdf en txt 2 [pyocr]
Convertir un PDF en image avec ImageMagick
Convertissez un grand nombre de fichiers PDF en fichiers texte à l'aide de pdfminer
Convertir les données au format XML en données au format txt (yolov3)
Comment convertir facilement le format de Markdown
Convertir de PDF en CSV avec pdfplumber
Convertir des fichiers PDF en fichiers PNG avec GIMP
Convertir le type de date Python au format RFC822
[Tensorflowjs_converter] Comment convertir le modèle Tensorflow au format Tensorflow.js
Convertir un PDF en image (JPEG / PNG) avec Python
Convertir en HSV
Convertissez l'historique d'utilisation de Suica mobile au format PDF au format pandas Data Frame avec tabula-py
Convertissez plusieurs fichiers jpg en un seul fichier PDF
Conversion par lots de fichiers PSD du répertoire en PDF
Convertir les données au format json en txt (en utilisant yolo)
[Petite histoire] Un moyen simple de convertir Jupyter en PDF
Convertir les packages binaires pour Windows au format roue
Sélectionnez PDFMiner pour extraire les informations textuelles du PDF
[Python] Suite - Convertir le texte PDF en CSV page par page
Convertir une chaîne au format de liste caractère par caractère avec python
Les débutants essaient de convertir des fichiers Word en PDF à la fois
Convertir un fichier texte avec des valeurs hexadécimales en fichier binaire
Convertir les articles Qiita au format de publication Jekyll pour la sauvegarde
Convertissez l'image au format .zip en PDF avec Python
Convertir / renvoyer des objets de classe au format JSON en Python
Comment convertir des fichiers Json au format CSV ou au format EXCEL
Convertir le fichier de ressources de traduction (.po) au format XLIFF (.xlf)
Convertir le fichier XML au format Pascal VOC en fichier json au format COCO
Convertir jupyter en py
Convertir keras-yolo3 en ONNX
Convertir dict en tableau
Convertir json en Excel
Comment sortir un document au format pdf avec Sphinx
Utilisez pyOCR pour convertir la description de la carte en texte
Python / datetime> Implémentation pour convertir le format AAAAMMJJ en AAAA / MM / JJ
Script Linux pour convertir les fichiers Markdown du format JupyterLab au format Qiita
Conversion par lots de fichiers image téléchargés vers MS Forms / Google Forms vers PDF
Convertissez des images numérisées déformées en PDF avec Pillow et PyPDF
[Caffe] Convertit le fichier moyen du format proto binaire au format npy
Script pour convertir entre les fichiers de langue Xcode et le texte délimité par des tabulations
Convertir un fichier Excel en texte en Python à des fins de comparaison