[Trac] Modify IEmailSender, E Mail Benachrichtung anpassen

Django, Flask, Bottle, WSGI, CGI…
Antworten
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo zusammen,

ich bin mir nicht sicher ob dies das richtige Unterforum ist, ist eine Frage zu Trac.
Ansonsten bitte einfach verschieben.

Ich bin mir bewusst, dass es sich hier um ein Python Forum handelt, aber da hier
viele fähige Programmier rumlaufen, dachte ich mir, vielleicht hat das ja schonmal
wer gemacht.

Zielsetzung von mir ist es, mittels Plugin das Benachrichtiungssystem von Trac zu
überarbeiten. Momentan wird entweder keine oder jede Änderung (sofort) übertragen.

Ich möchte nun das der Benutzer (in einer extra Oberfläsche) einstellen kann,
welche Email er sofort, täglich, wöchentlich in welcher Form bekommen will.
An sich auch kein Problem, Oberfläche steht und die Logik ist auch weitesgehend fertig.

[KernProblemstellung - Für die schnellen Leser]
Mir gelingt es nicht den Event von Trac abzufangen, sobald das System
eine Email versenden möchte.
Doch genau bei diesem Event muss ich ja eingreifen um zu kontrollieren wann und wie
Emails versendet werden sollen.

An sich sollte das über den neunen Extension Point / Erweiterungspunkt IEmailSender
(seit Version .12) möglich sein.

Mit folgendem Code, bekomme ich allerdings vom Event nichts mit (die Email wird
korrekt verschickt)

Code: Alles auswählen

class mailtest(Component):  
    implements(IEmailSender) 
    
    #IEmailSender
    def send(self, from_addr, recipients, message):
        print "IEmailSender"
        print "From: %s"%from_addr
        print "To: %s"%recipients
        print "message: %s"%message
        return from_addr, recipients, message
So wollte ich fragen, ob von euch vielleicht einer in der Richtung schon was gemacht hat, und mir
einen Hinweis geben könnte, wo ich hier eingreifen muss.

Vielen Dank schonmal für die Hilfe.

Grüße

Stefan

Quellen:
Plugin-Entwicklung unter Trac: http://trac.edgewall.org/wiki/TracDev/PluginDevelopment
Extension Point

Code: Alles auswählen

class IEmailSender(Interface):
	    """Extension point interface for components that allow sending e-mail."""
	   
	    def send(self, from_addr, recipients, message):
	        """Send message to recipients."""
Entsprechende Klasse: notification.py
http://trac.edgewall.org/browser/trunk/ ... ication.py
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Hast du in der Config deine Implementierung eingetragen? Die entsprechende Config-Variable heißt: section: notification key: email_sender. Wenn du das nicht machst ist als Default SmtpEmailSender aktiv, siehe http://trac.edgewall.org/browser/trunk/ ... ion.py#L48, eg:

Code: Alles auswählen

[notification]
email_sender = Deinklassenname
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

[Edit]
Danke funktioniert wie versprochen.

Anbei ein Minimalbeispiel, falls das auch mal wer brauchen kann

Code: Alles auswählen

class myMailTest(Component):  
    implements(IEmailSender,) 
    
    
    #IEmailSender
    def send(self, from_addr, recipients, message):
        try:
            self.env.mailer.send(from_addr, recipients, message)
        except AttributeError, e:
            self.env.mailer= SmtpEmailSender(self.env)
            self.env.mailer.send(from_addr, recipients, message)
Antworten