Seite 4 von 6

mail queue

Verfasst: Mittwoch 19. Dezember 2007, 22:10
von philippe
ersten möchte ich an dieser stelle mitteilen, dass auch ich simplemail.py echt super finde!
zweitens bedanke ich mich bei gerold, der mir bei meinem dummen problem auf die sprünge geholfen hat....

aber der wahre grund für mein post ist folgender:
ich verwende nun simplemail seit einiger zeit und musste feststellen, dass bei kurzen netzunterbrüchen in ungünstigen momenten (wireless und co.) email verlohren gehen können. ich schreibe beim scheitern von send() einen logeintag so weiss ich was nicht versendet wurde (...) aber viel lieber wäre mir gar nichts unternehmen zu müssen - händisch versteht sich ;) .

nun meine idee:
ich will einen art email queue schreiben, welche die email bis zu 3 tagen zurück hält bis diese erfolgreich zugestellt werden konnte.

mein ansatz (pseudo code):

Code: Alles auswählen

loop mit 864 durchgängen:
     sendeversuch
     wenn erfolgreich: ende
     sonst: 300 sekunden schlafen
zustellung gescheitert: logeintrag schreibe.
vorteile:
- mail kann wahrscheinlich irgendwann zugestellt werden (innert 3 tagen)

nachteile:
- objekt im speicher
- laufender prozess, im schlechtesten fall 3 tage

fragen:
- hat jemand eine bessere idee?
- was kann verbessert werden??

mfg, philippe

Re: mail queue

Verfasst: Mittwoch 19. Dezember 2007, 23:03
von Leonidas
philippe hat geschrieben:fragen:
- hat jemand eine bessere idee?
Also der Unix-Way ist, die Mail an den lokalen MTA zu vergeben und der soll sich darum kümmern. Dafür haben MTAs auch ihre Queues, wo sie Mails zwischenlagern, die gerade nicht weitergerelayt werden können. Man muss zugeben, dass SMTP ein recht robustes System ist (eben etwas was auch bei großen Netzwerkausfällen verursacht durch Atomwaffen - siehe ARPAnet noch läuft). Schade dass das durch das Spamming alles so zurückgedreht werden musste.

Verfasst: Donnerstag 20. Dezember 2007, 07:53
von gerold
Hallo philippe!

Ich halte den Vorschlag von Leonidas für die beste Lösung für dich. Unter Linux ist es ja kein großes Problem, einen MTA wie z.B. Postfix zu installieren. Die Emails verschickst du dann über den lokal eingerichteten SMTP-Server. Dieser kümmert sich dann um all das was du dir selber programmieren wolltest.

Unter Windows kannst du es mal mit dem JanaServer http://janaserver.de/ probieren. Wenn es damit nicht funktioniert, dann kannst du immer noch auf den mit *Cygwin* gelieferten *Exim* zurück greifen.

mfg
Gerold
:-)

Verfasst: Donnerstag 20. Dezember 2007, 11:39
von Leonidas
gerold hat geschrieben:Unter Windows kannst du es mal mit dem JanaServer http://janaserver.de/ probieren. Wenn es damit nicht funktioniert, dann kannst du immer noch auf den mit *Cygwin* gelieferten *Exim* zurück greifen.
Daneben gibt es noch Hamster und Mercury, die beides Windows SMTP-Daemons sind.

Verfasst: Donnerstag 20. Dezember 2007, 17:46
von DatenMetzgerX
oder hMailServer, der ziemlich leicht zu konfigurieren ist

Verfasst: Freitag 28. Dezember 2007, 14:32
von philippe
besten dank für eure feedbacks,
ich werde mal brav Postfix installieren =)

Verfasst: Samstag 5. Januar 2008, 14:57
von Hyperion
Hallo Gerold,

vielen Dank für Dein Modul. Ich habe es erfolgreich für die Lehre hier an der Uni einsetzen können (Bestätigungsmail an Studis, nach einer Anmeldung für eine kleine Aufgabe im HTML-Bereich). Eine Kleinigekeit würde ich gerne anmerken: Wäre toll, wenn mann das encoding des Outputs angeben könnte! (Ich habs im Quellcode hart reincodiert / bzw. geändert, aber das geht sicher eleganter) Oder hab ich nur die Möglichkeit übersehen?

Auf jeden Fall sehr schön!

Ciao,
Hyperion

Verfasst: Samstag 5. Januar 2008, 15:21
von gerold
Hyperion hat geschrieben:Wäre toll, wenn mann das encoding des Outputs angeben könnte!
Hallo Hyperion!

Die Attribute *content_charset* und *header_charset* sind dafür zuständig. Diese kann man zwar nicht direkt über die Methode *send()* einstellen, aber nach dem Initialisieren der Klasse *Email* neu setzen.

Code: Alles auswählen

email = Email(...)
email.content_charset = "utf-8"
email.header_charset = "utf-8"
email.send(...)
http://gelb.bcom.at/trac/simplemail/bro ... il.py#L209

mfg
Gerold
:-)

Verfasst: Samstag 5. Januar 2008, 15:49
von Hyperion
*patsch* Ok, war damals in Zeitnot ... hätte ich auch so drauf kommen können ;) Hatte keine Instanz erstellt, sondern das ganze direkt abgesetzt, also

Code: Alles auswählen

Email(...=...).send()
Ok, nun weiß ich ja aber, dass es auch besser geht :D

Danke Dir!

Verfasst: Mittwoch 27. Februar 2008, 15:54
von mr.hide
Habs für mich nun erweitert, so dass man Bilder direkt in die Email einbinden kann.
hab Gerold angeboten es ihm zu geben.

Bei Interesse falls er sich nicht die ARbeit macht das einzubinden pn an mich.

Verfasst: Dienstag 11. März 2008, 12:43
von gerold
mr.hide hat geschrieben:Habs für mich nun erweitert, so dass man Bilder direkt in die Email einbinden kann.
Hallo Leute!

Ich bin im Moment ein wenig überlastet. Deshalb habe ich den Code von mr.hide in einen Subversion-Branch gestellt.

http://gelb.bcom.at/svn/pub/simplemail/ ... s/mr.hide/

mfg
Gerold
:-)

Verfasst: Freitag 11. April 2008, 08:46
von EnTeQuAk
Ich bin noch nicht ganz fertig, aber ich bin grad dabei simplemail ein wenig aufzupeppen und zu erweitern.

Erstmal den Quelltext aufgeräumt und einige Altlasten entfernt: http://paste.pocoo.org/show/39500/

Nun, es ist nicht mehr 100%ig Rückwertskompatibel, aber das war nicht mein Ziel. Demnächst wird noch ein einfacheres SMTP-Interface sowie ein einfaches Alternative-Multipart interface, um HTML und Textnachrichten einfach zu mixen.

Mal schaun, was draus wird :D

MfG EnTeQuAk

EDIT: link zur fehlerbereinigten Version aktualisiert

Verfasst: Freitag 11. April 2008, 14:56
von mkesper
Gibt's eine Chance, dass das eines Tages als offizielles Modul oder im pypi auftaucht?

Verfasst: Dienstag 22. April 2008, 11:29
von lunar
mkallas hat geschrieben:Gibt's eine Chance, dass das eines Tages als offizielles Modul oder im pypi auftaucht?
Die LGPL erlaubt dir, den Code unter gleichen Lizenzbedingungen zu verändern und weiterzugeben. Ergo darfst du auch selbst ein Setuptools-Script dafür schreiben und das Ganze in den Cheeseshop packen ;) Wenn gerold dann das Paket übernehmen will, kannst du ihn ja als Maintainer oder Owner eintragen.

Verfasst: Montag 2. Juni 2008, 13:34
von EnTeQuAk
Ich hab vor einiger Zeit an simplemail wieder weitergebastelt, rausgekommen ist eine bessere Aufteilung zwischen SMTP geblapper und dem eigentlichen Email wrapper.

Siehe http://trac.webshox.org/browser/misc/simplemail.py

Es ist auch alles schön dokumentiert, ok ne deutsche version werd ich wohl mal demnächst schreiben.
Sofern noch jemand ne Idee hat, was man verbessern kann, immer her damit! Das Interface zum benutzen ist fast das gleiche geblieben siehe das unten angefügte Beispiel (inner simplemail.py)


MfG EnTeQuAk

Verfasst: Montag 2. Juni 2008, 13:56
von jens
Habe mir jetzt dein Beispiel nicht richtig angesehen... Aber wie wäre es, das ganze im http://pypi.python.org/pypi zur Verfügung zu stellen. Evtl. sogar zur Aufnahme in Python vorschlagen?

Verfasst: Montag 2. Juni 2008, 14:04
von EnTeQuAk
pypi werd ich mich mal mit auseinandersetzen, aufnahme in python denke ich nicht. Zumindest werde ich nicht als Maintainer einspringen, ich hab nur mal ein wenig dran rumgebastelt :)
Wobei das ja immernoch gerolds modul ist *g*

Verfasst: Montag 2. Juni 2008, 16:55
von audax
Dann werde ich wohl demnächst schaun, wie zuverlässig das funzt ;)

Wenn demnächst ein Student nicht zu den Prüfungen angemeldet wird ist Gerold schuld :D

Verfasst: Montag 2. Juni 2008, 17:11
von lunar
jens hat geschrieben:Habe mir jetzt dein Beispiel nicht richtig angesehen... Aber wie wäre es, das ganze im http://pypi.python.org/pypi zur Verfügung zu stellen. Evtl. sogar zur Aufnahme in Python vorschlagen?
Siehe mein vorheriges Posting: Auch du kannst das in den pypi eintragen, wenn dir daran so viel liegt ;)

Wenn EnTeQuAk oder jemand anders das dann übernehmen will, steht dem ja auch nichts im Weg ;)

email in den imap Sent ordner kopieren

Verfasst: Dienstag 10. Juni 2008, 22:13
von Leon
Hi!

Ich find das simplemail sehr praktisch!
Allerdings verwende ich imap und wollte die gesendeten emails auch in meinem email-client und online sehen.
Deshalb habe ich ans simplemail.py noch folgenden text angefügt:

#
# Email nach gesendet kopieren...
#
imap_server = "imap.server.de"
im = imaplib.IMAP4(imap_server)
im.login(self.smtp_user, self.smtp_password)

im.select("Sent")
im.append("Sent", None, None, msg.as_string())

im.close()
im.logout()

Vielleicht hilfts ja jmd .-)

Leon