Python TagebuchPython lernen – mein persönliches Tagebuch

Tagebuch-Eintrag #40
Projekt-Idee: PDF aus Email drucken – Schritt #3.1

Im Schritt #3 wurde ich mit dem Problem konfrontiert, dass der Programm-Code nicht wüsste, wie oft die Dateien im ausgedruckt werden sollen.
Werbung/Anzeige

So nah an dran und doch so fern kam mir in den Sinn, als ich im letzten Schritt es geschafft hatte die PDF-Dateien herunterladen und zu speichern und am Ende ein Logikfehler auffiel.

Woher weiß Python wie oft die Dateien gedruckt werden soll?

Ich habe hin und her überlegt. Und versuchte auf Glück einfach folgendes (einfach der Logik gefolgt).

Meine bisherige while-Schleife zum ausdrucken der PDF-Dateien nach der Zahl im Betreff (Zeile 46 bis 51) verschob ich einfach in die for-Schleife, wo die Dateien abgespeichert werden (ab Zeile 52) und innerhalb der if-Bedingung in der Zeile 61.

Um ehrlich zu sein, hatte ich nicht erwartet, dass es funktioniert. Aber es hat funktioniert. Als ich das Programm dann startete hat es wirklich (symbolisch mit der print-Ausgabe (Zeile 78, 79) die PDF-Dateien so oft ausgedruckt, wie die Zahl im Betreff es vorsieht.

Ich war baff! Und das ist der aktuelle Code

import imaplib
import base64
import os
import email

email_user = "USER"
email_pass = "PASS"

mail = imaplib.IMAP4_SSL("HOST", PORT)
mail.login(email_user, email_pass)
# Nur die Inbox duchsuchen
mail.select("Inbox")
# Nach Emails vom bestimmten Absender (FROM) suchen mit dem Begriff "drucken" im Betreff.
result, data = mail.search("UTF-8", 'UNSEEN FROM "ABSENDER@DOMAIN.DE" SUBJECT "drucken"')
mail_ids = data[0]
id_list = mail_ids.split()
latest_email_uid = int(id_list[-1])
for num in data[0].split():
    result, data = mail.fetch(num, "(RFC822)")
    raw_email = data[0][1]
    
    # Converts byte literal to string removing b''
    raw_email_string = raw_email.decode("utf-8")
    email_message = email.message_from_string(raw_email_string)

    # Anhänge erfassen und runterladen (später)
    
    # Nachrichten in einer for-Schleife ausgeben.
    for response_part in data:
        if isinstance(response_part, tuple):
            msg = email.message_from_string(response_part[1].decode("utf-8"))
            email_subject = msg["subject"]
            email_from = msg["from"]
            print("***" * 5)
            print("From: ", email_from, "\n")
            print("Subject: ", email_subject, "\n")
            print("***" * 5)
            # Betreff erfassen und in einer Liste umwandeln
            subject_command = email_subject.split(",")
            # Zahl für Exemplare
            copy = int(subject_command[0])
            # Signalwort "drucken"
            task = subject_command[1]
            # n = 1
            # Anhänge ausdrucken. Exemplare je Anhang basierend auf Zahl im Betreff
            # while n <= copy:
            #     print("+++++" * 5)
            #     print("PDF-Datei wird ausgedruckt...")
            #     print(str(n) + ". " + "Druck")
            #     print("+++++" * 5)
            #     n = n + 1
        for part in email_message.walk():
            if part.get_content_type() != "application/pdf":
                continue
            if part.get("Content-Disposition") is None:
                continue
            fileName = part.get_filename()
            if bool(fileName):
                filePath = os.path.join("c:/", "Users/username/Desktop/printing_jobs", fileName)
                # Hier werden die Dateien in den Ordner gespeichert
                if not os.path.isfile(filePath):
                    fp = open(filePath, "ab")
                    fp.write(part.get_payload(decode=True))
                    fp.close()
                    # print("N:", fileName)
                    # Betreff erfassen und in einer Liste umwandeln
                    subject_command = email_subject.split(",")
                    # Zahl für Exemplare
                    copy = int(subject_command[0])
                    # Signalwort "drucken"
                    task = subject_command[1]
                    n = 1
                    # Anhänge ausdrucken. Exemplare je Anhang basierend auf Zahl im Betreff
                    while n <= copy:
                        # Die while-Schleife durchläuft für jede PDF-Datei von jeder Email. Exemplare basierend auf Zahl im Betreff.
                        print("+++++" * 5)
                        # Ich brauch jetzt hier nur eine Funktion, für den Druck der Dateien
                        print(fileName, "PDF-Datei wird ausgedruckt...")
                        print(str(n) + ". " + "Druck")
                        print("+++++" * 5)
                        n = n + 1              
# Verbindung trennen und ausloggen.
mail.close()
mail.logout()

Jetzt werden die PDF-Dateien von den jeweiligen Emails auch in der gewünschten Anzahl ausgedruckt – zumindest wüsste ich theoretisch, wo der entsprechende Programm-Code hinzugehört.

Das kommt dann als nächstes. Ich nähere mich dem Ende 😀

# # ## ENDE Tagebuch-Eintrag #40 | Projekt-Idee: PDF aus Email drucken – Schritt #3.1
Werbung/Anzeige
Schlagwörter im Tagebuch-Eintrag:

Kommentar schreiben




Werbung/Anzeige