Tagebuch-Eintrag #35
Projekt-Idee: PDF aus Email drucken
Mittlerweile habe ich meiner Meinung nach die wichtigsten Grund-Funktionen von Python kennen gelernt. Das heißt natürlich nicht, dass ich nun alles perfekt kann. Ich habe hier nur an der Oberfläche gekratzt. Bis ich Python einigermaßen sicher beherrschen kann, ist es noch ein sehr weiter Weg. Und bis dahin, muss ich noch viel üben.
Und was kann eine bessere Übung sein, als ein wirklich funktionierendes Programm zu schreiben, was den eigenen Alltag erleichtert?
Das nehme ich mir nun vor. Denn ich habe das Gefühl, dass ich bereit dazu bin und es juckt mir in den Fingern 😉
Hintergrund zu dieser Python-Projekt-Idee
Ich bekomme auf Arbeit jeden Tag Emails mit PDF-Anhänge, die ausgedruckt werden soll. Zum Beispiel Rechnungen. Manchmal auch in zweifacher Ausführung. Um dies nicht immer manuell zu machen, kam mir die Idee es mit Python umzusetzen.
Grobe-Grund-Gedanken zum Ablauf und Funktionen des Python-Programms
Das Python-Programm soll im Hintergrund laufen und in einem festgelegten Zeitintervall den Posteingang (IMAP) überprüfen. Es ist nicht notwendig, das mein E-Mail-Programm überwacht wird.
Schritt #1 – Auf dem IMAP-Server einloggen und Filtern
Zuerst muss eine Verbindung zum IMAP-Server aufgebaut werden. Danach scannt das Python-Programm den Posteingang nach E-Mails, welches für meinen Zweck nur von einem bestimmten Absender kommt und noch nicht gelesen wurde.
Schritt #2 – Nach Betreff Filtern und nach PDF-Dateien suchen
Wenn nach dem ersten Schritt Emails vom bestimmten Absender gefunden wurde, wird überprüf ob der passende Betreff „x, drucken“ vorhanden ist (x entspricht eine Zahl) und danach, ob PDF-Dateien im Anhang sind. Beide Bedingungen müssen erfüllt sein, damit der nächste Schritt durchgeführt wird.
Andere E-Mails, die dieses Signalwort „drucken“ nicht haben oder von anderen Absendern kommen, werden vom Programm nicht weiter beachtet und sind weiterhin „ungelesen“.
Schritt #3 – PDF-Dateien herunterladen und drucken
Sind die Bedingungen bisher alle erfüllt, werden die PDF-Dateien in einem Ordner gespeichert und ausgedruckt. Die Anzahl an Exemplare werden im Betreff definiert. Der Betreff „2, drucken“ heißt dann zum Beispiel, dass jede PDF-Datei zwei mal ausgedruckt werden sollen.
Für eine Art Absicherung möchte ich eine Abfrage einbauen, dass die PDF-Datei z.B. nur max mal 5 mal ausgedruckt werden sollen. Man kann sich ja immerhin leicht vertippen und man druckt dann mehr aus, als gewollt.
Ist die Zahl im Betreff größer als 5, soll eine automatische Antwort erfolgen und dem Absender fragen, ob die Dateien wirklich so oft ausgedruckt werden sollen. Der Absender antwortet mit „ja“ oder eine neue Zahl, die kleiner sein muss als bisher.
Wurden die Dateien ausgedruckt soll die entsprechende Email dann auf gelesen gesetzt werden, so dass ich es trotzdem mit meinem Email-Programm abrufen kann.
So, das sind die grundlegenden Gedanken von mir zum Programm. Als Beispiel habe ich einen kleinen Code zum Ablauf geschrieben, welche im groben die Funktion veranschaulichen soll. Nicht alle oben beschriebenen Funktionen oder Abläufe tauchen im Code auf.
Der Code und dieser Tagebuch-Eintrag dient mir als Gedanken-Stütze, falls ich was vergessen sollte. Erfahrungsgemäß fallen mir neue Dinge ein, die ich einbauen möchte, die vielleicht besser funktionieren, damit Fehler oder ungewollte Ereignisse nicht passieren.
Ich werde in meinem Python-Tagebuch die Entwicklung festhalten. Ich bin gespannt, ob ich das Python-Programm schreiben kann und zum Laufen bekomme 😉
import time
def check_mailbox():
global check_email
check_email = False
time.sleep(5)
check_email = True
check_email = True
while check_email:
subject = "2, drucken"
# Der Betreff wird aufgesplittet in Zahl und Befehl
subject_command = subject.split(",")
copy = int(subject_command[0])
task = subject_command[1]
if "drucken" not in subject:
print("Keine PDF-Dateien zum Ausdrucken vorhanden")
check_mailbox()
elif copy > 5:
print("sicher dass du es", copy, "mal ausdrucken willst?")
break
else:
print("Zu druckende Dateien gefunden")
n = 1
while n <= copy:
print("PDF-Datei wird ausgedruckt...")
print(str(n) + ". " + "Druck")
time.sleep(2)
n = n + 1
check_mailbox()