Python TagebuchPython lernen – mein persönliches Tagebuch

Tagebuch-Eintrag #44
E-Mail senden mit Python

Ich habe meine Python-Script zum drucken von PDF-Dateien um eine neue Funktion ergänzt.
Werbung/Anzeige

Ich habe mich nochmal mit meinem ersten Python-Projekt zum drucken von PDF-Dateien aus E-Mails beschäftigt, weil da noch eine nützliche Funktion gefehlt hat.

Ich möchte nämlich eine Bestätigungsemail an den Absender schicken und auflisten, dass die Dateien gedruckt wurden.

Und für das Senden der E-Mails brauche ich auch ein andere Python-Modul, welches smtplib heißt.

Dieses Modul ermöglich es sich mit dem SMTP-Server zu verbinden und eine einfach Email zu senden. Der Code mit der Grundfunktion sieht wie folgt aus:

import smtplib
host = "HOST/SMTP SERVER"
port = "PORT"
smtp_user = "SMTP_USER"
smtp_pass = "PASWORT"

from_email ="ABSENDER@DOMAIN.DE"
to_email = "EMPFÄNGER@DOMAIN.DE"

smtp = smtplib.SMTP(host, port)
smtp.login(smtp_user, smtp_pass)

message = "Hallo!\nDiese Nachricht wurde automatisch mit Python gesendet."

smtp.sendmail(from_email, to_email, message)
smtp.close()

Das Senden der E-Mail mit der Nachricht funktioniert zwar, aber es fehlen noch wichtig Informationen im E-Mail Header wie Absender, Betreff, Empfänger.

smtplib - E-Mail Header fehlen: Absender, Betreff. Aus Empfängersicht.
smtplib – E-Mail Header fehlen: Absender, Betreff

Email mit Email-Header + Nachricht

Damit auch der E-Mail Header mit Informationen gefüllt werden kann, gibt es dafür ein weiteres Python-Moduls namens EmailMessage.

Damit lassen sich neben dem Inhalt (Body), auch Absender, Empfänger und Betreff definieren und zusammenführen.

import smtplib
from email.message import EmailMessage

host = "HOST/SMTP SERVER"
port = "PORT"
smtp_user = "SMTP_USER"
smtp_pass = "PASSWORT"

from_email ="ABSENDER@DOMAIN.DE"
to_email = "EMPFÄNGER@DOMAIN.DE"

msg = EmailMessage()
msg["FROM"] = from_email
msg["To"] = to_email
msg["Subject"] = "Python Nachricht"
msg.set_content("Hallo!\nDiese Nachricht wurde automatisch mit Python gesendet!!!!.")

text = msg.as_string()

smtp = smtplib.SMTP(host, port)
smtp.login(smtp_user, smtp_pass)

smtp.sendmail(from_email, to_email, text)
smtp.close()

Und schon sieht die Email schon besser aus, wie eine ordentliche Email 😉

Email mit Absender, und Betreff. Ansicht als Empfänger
Email mit Absender, und Betreff. Ansicht als Empfänger

Damit habe ich die Grundlage geschaffen, um die Funktion „Bestätigungsemail nach ausdrucken der PDF“ zu integrieren.

Dateinamen in Email-Body

Die Funktion zum Versenden der Email musste ich inhaltlich noch anpassen, dass die Dateinamen in Email-Body eingefügt werden sollen.

Der bisherige Python-Code speichert alle Dateien in einem Order und diesen Ordner lese ich in einer for-Schleife aus. Weil die Ausgabe in der for-Schleife den kompletten Pfad zur Datei ausgibt und ich nur den Dateinamen für den Email-Body benötige, habe ich jeden einzelnen Pfad aufgesplittet mit split() und immer nur den letzten Wert in einer neuen Liste hinzugefügt. Der letzte Wert ist natürlich der Dateiname. Das ist sicher 😉

Diese neue Liste mit den Dateinamen kommt dann in die Senden-Funktion. Wofür ich auch neue Funktionen wie MIMEMultipart und MIMEText von Python benötige.

Senden der Dateinamen aus einem Order

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

source = [LISTE MIT DATEIN INKL. PFAD]
# Aufsplitten der Dateipfade, so dass nur Dateinamen in die neue Liste übertragen werden..
file_list = []
for a in source:
    splited = a.split("\\")[-1]
    file_list.append(splited)

host = "HOST"
port = "PORT"
smtp_user = "USER"
smtp_pass = "PASS"

from_email ="ABSENDER@"
to_email = "EMPFÄNGER@"

msg = MIMEMultipart()
msg["FROM"] = from_email
msg["To"] = to_email
msg["Subject"] = "Python Nachricht"
# mit join wird jede Datei, also Listen-Wert eine neue Zeile erstellt
body = "\r\n".join(file_list)
msg.attach(MIMEText("Liste der Dateien:\n\n" + body, 'plain'))
text = msg.as_string()

smtp = smtplib.SMTP(host, port)
smtp.login(smtp_user, smtp_pass)

smtp.sendmail(from_email, to_email, text)
smtp.close()

Mein Python-Programm habe ich mit dieser Funktion ergänzt und nun bekommt jemand eine Email, dass Dateien X, Y, Z ausgedruckt wurden, ohne dass die Dateien als Anhang zurückgeschickt werden

Verwendete Tutorials oder Dokumentationen

Natürlich habe die es nicht komplett alleine geschrieben und musste mich auf diversen Seiten belesen. Ich bin ja immer noch ein Anfänger, das möchte ich weiterhin betonen. Und ich möchte hier neben den oben verlinkten Python-Dokumentationen, die hilfreichen Seiten verlinken, die mir geholfen haben:

# # ## ENDE Tagebuch-Eintrag #44 | E-Mail senden mit Python
Werbung/Anzeige
Schlagwörter im Tagebuch-Eintrag:

Kommentar schreiben




Werbung/Anzeige