@fred0815: Du hier?

Hättest Du mal in Stammtisch was gesagt, dann hätte ich früher hier reingeschaut.
Im ersten Beitrag sind die Konstanten ja noch korrekt gross geschrieben und es gibt Funktionen. Mindestens eine sollte es geben.
Namen ausser Konstanten und Klassen (PascalCase) werden klein_mit_unterstrichen geschrieben.
Die Ausnahmebehandlung im ersten Beitrag ist schlecht (ist ja netterweise auch verschwunden) weil da Information zur Fehlersuch einfach weggeworfen wird.
`obj` ist ein unsinniger Namenszusatz. In Python ist *alles* ein Objekt, also könnte man das an jeden Namen noch anhängen, es hat aber keinerlei Information für den Leser.
Das erstellen der Mail und das versenden ist ziemlich wild vermischt. Sinnvolle Reihenfolge wäre Datei laden, Nachricht erstellen, Verbindung zum Server aufbauen, Nachricht verschicken. Wenn einer der Schritt nicht klappt, beispielsweise weil es gar keine Textdatei in dem Verzeichnis gibt, oder die Rechte nicht ausreichen die Datei zu lesen, oder die Kodierung (das Böse Wort der Woche) nicht passt und die Datei deswegen nicht gelesen werden kann, dann braucht man die jeweiligen Folgeschritte ja gar nicht erst anfangen.
Was bei den Schritten die ich da gerade aufgezählt habe fehlt, genau wie im Programm, ist die Verbindung zum Server wieder abzubauen. So weiss man nicht ob die sauber mit dem entsprechenden SMTP-Befehl beendet wird, oder ob das Programm oder das Betriebssystem am Ende einfach die TCP-Verbindung kappt ohne Tschüss zu sagen. `SMTP`-Objekte sind Kontextmanager, die kann man also mit ``with`` verwenden.
`os` und `glob.glob()` verwendet man eher nicht mehr für Sachen die mit `pathlib` gemacht werden können.
Beim öffnen oder einlesen von Textdateien sollte man immer explizit die Kodierung angeben. Sonst wird da ”geraten”.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from pathlib import Path
SMTP_SERVER = "mail.gmx.net"
SMTP_PORT = 587
USERNAME = "a@gmx.de"
PASSWORD = "geheim"
SENDER = "a@gmx.de"
RECIEVER = "b@gmx.de"
SUBJECT = "Mail"
def main():
body = max(
Path("/pfad/zum").glob("*.txt"), key=lambda path: path.stat().st_ctime
).read_text(encoding="utf-8")
message = MIMEMultipart()
message["From"] = SENDER
message["To"] = RECIEVER
message["Subject"] = SUBJECT
message.attach(MIMEText(body, "plain"))
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as smtp_client:
smtp_client.set_debuglevel(1)
smtp_client.starttls()
smtp_client.login(USERNAME, PASSWORD)
smtp_client.sendmail(SENDER, RECIEVER, message.as_string())
if __name__ == "__main__":
main()