Ein Unternehmen sendet mir eine E-Mail mit einem angehängten PDF.
Es ist auch möglich, einen Mail-Dienst zu verwenden, der PDFs wie Google Mail durchsuchen kann, aber ich wollte nicht zu viel ausgehen und ich wollte angemessen damit umgehen, wenn ein bestimmtes Schlüsselwort gefunden wurde, also habe ich Pythons pyPdf ausprobiert.
Zuerst. Aus den Mail-Einstellungen. Stellen Sie die E-Mail-Software ein, die Sie normalerweise verwenden, um "E-Mails auf dem Server zu belassen" und die auf dem Server verbleibenden E-Mails mit E-Mail- und Proc-E-Mails abzurufen. Dieses Mal habe ich die in der Cygwin-Umgebung verwendet und die folgende Einstellungsdatei geschrieben.
.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/
Wenn Sie dies schreiben, wird die E-Mail von test @ example in / var / spool / mail gespeichert, und andere E-Mails werden / dev / null sein (dh verworfen). Da es als Keep auf der Fetchmail-Seite geschrieben ist, bleibt es auf dem Server. Der Speicherort kann überall sein, aber es ist bequem, ihn mit Mutt usw. zu lesen, also habe ich ihn auf / var / spool / mail gesetzt.
Laden Sie dann pyPdf herunter und installieren Sie python setup.py.
http://pybrary.net/pyPdf/
PyPdf-Beispielprogramm und Beispiel für das Schreiben von Anhängen mithilfe eines E-Mail-Pakets Kopieren Sie .html) entsprechend und schreiben Sie ein Skript, um eine PDF-Datei und eine aus der PDF-Datei extrahierte Datei in einem geeigneten Ordner zu generieren.
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)
Erstellen Sie abschließend eine Batchdatei wie diese und führen Sie sie regelmäßig mit dem Windows-Taskplaner usw. aus. OK.
pdfmail.bat
C:\cygwin\bin\bash --login -i -c "fetchmail"
C:\cygwin\bin\python2.7.exe pdfmail.py
Recommended Posts