Python TagebuchPython lernen – mein persönliches Tagebuch

Tagebuch-Eintrag #39
Projekt-Idee: PDF aus Email drucken – Schritt #3

Auch der nächste Schritt ist getan. Es fehlt nicht mehr viel und die gewünschte Funktion zum Drucken ist fertig.
Werbung/Anzeige

Im vorherigen Schritt hatte ich es geschafft Anhänge von den relevanten Emails zu erfassen und schon mal theoretisch auszudrucken.

Nun geht es im Schritt #3 darum die Anhänge auch in einem Ordner abzuspeichern und auch nur PDF-Dateien aus den gefilterten Emails herunterzuladen und andere Dateiformate zu ignorieren.

Erinnerung: Für meinen Zweck im Büro sind nur PDF-Dateien relevant

Der Programm-Code hat sich erneut etwas geändert. Klar, muss ja auch wenn neue Abläufe reinkommen.

Der Code um Anhänge herunterladen und zu speichern ist nun ab der Zeile 48 zu finden. Und damit nur PDF-Dateien heruntergeladen werden sollen, hat sich die Zeile 49 geändert.

Vorher wurde alle Anhänge heruntergeladen:

for part in email_message.walk():
    if part.get_content_maintype() == "multipart":
        continue

Jetzt werden nur PDF-Dateien berücksichtigt. Der Code sagt aus, wenn es keine PDF-Datei ist, mache weiter bist eine PDF-Datei im Anhang in der Email ist.

for part in email_message.walk():
    if part.get_content_type() != "application/pdf":
        continue

Wenn eine PDF-Datei (Zeile 54) vorhanden ist, soll diese dann in dem Ordner abgespeichert werden, welches in der nächsten Zeile unter os.path.join() definiert wird.

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)
    # 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()
# Verbindung trennen und ausloggen.
mail.close()
mail.logout()

Das Abspeichern in einem Ordner funktioniert jetzt. Aber ich habe hier einen Denkfehler, wenn ich die Dateien aus dem Ordner heraus drucken soll.

Nämlich, woher genau soll die Funktion dann wissen, wie oft welche Datei ausgedruckt werden soll?

Ach menno, immer wieder was neues ;o)

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

Kommentar schreiben




Werbung/Anzeige