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