Dauer einer stmplib connection

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

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
Dies ist keine Signatur!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Antworten