Seite 1 von 1

Dauer einer stmplib connection

Verfasst: Freitag 20. Januar 2017, 00:59
von Shaldy
Hallo zusammen,

ich habe einen kleinen Tornado Webserver laufen, der auf bestimmte Anfragen eine Email versendet. Um das Framework selbst geht es mir gar nicht, sondern um den smtplib Call:

Code: Alles auswählen

smtp = smtplib.SMTP(server, 587)
smtp.starttls()
smtp.login(user, password)

# ...fancy stuff

smtp.sendmail(send_from, address, msg.as_string())
smtp.quit()
Mein Problem ist, dass ich diesen Code exakt so für jede Request ausführe, also inklusive des Verbindungsaufbaus zum Mailserver. Schöner wäre es ja eigentlich, die Verbindung einmal aufzubauen und das entsprechende Objekt als Attribut in meiner Handler-Klasse zu halten. Allerdings weiß ich nicht, wie lange so eine Verbindung offen bleibt wenn keine Daten ausgetauscht werden (der Server kann schon mal 10 Tage ohne Anfrage laufen). Habt ihr eine Idee dazu?

Liebe Grüße
Alex

Re: Dauer einer stmplib connection

Verfasst: Freitag 20. Januar 2017, 01:41
von DasIch
Der Server wird die Verbindung nach wenigen Minuten schließen, sofern du nichts damit anstellst. Du musst halt schauen dass du die Situation sinnvoll behandelst z.b. indem du die Verbindung bei der nächsten Mail die du verschickst wieder aufbaust.

Das ganze kannst du dir aber ohnehin sparen wenn du ohnehin nie mehrere Nachrichten Sekunden voneinander versendest. So eine offene Verbindung benötigt schließlich auch Resourcen, die also offen zu halten ohne entsprechenden Bedarf ist definitiv nicht elegant.

Re: Dauer einer stmplib connection

Verfasst: Freitag 20. Januar 2017, 08:41
von Sirius3
@Shaldy: da smtplib nicht multithreading-tauglich ist, brauchst Du einen eigenen Thread, der über eine Queue Mails entgegen nimmt und sie verschickt. Beim Abfragen der Queue kannst Du dort ganz einfach einen Timeout einbauen, so dass die Verbindung nach ein paar Sekunden abgebaut wird, falls es keine weiteren Mails anstehen.

Re: Dauer einer stmplib connection

Verfasst: Freitag 20. Januar 2017, 11:14
von snafu
Verbindungen zu Servern sind eigentlich nicht auf Langlebigkeit ausgelegt. Eine Wiederverwendung würde ich nur machen, wenn ich z.B. ein paar Mails in einer Warteschlange habe, die ich in einem Rutsch über den Server versenden möchte. Falls nicht unmittelbar ein Versand ansteht, dann schließt man die Verbindung üblicherweise wieder.

Übrigens sei an dieser Stelle simplemail empfohlen, welches von einem langjährigen Mitglied hier aus dem Forum stammt. Das Wichtigste ist direkt auf der PyPI-Seite dokumentiert. Verschlüsselung kriegt man, wenn man use_tls und/oder use_ssl auf True setzt. Kommt auch gut mit deutschen Umlauten klar.