Edgewall Software

Version 6 (modified by Peter Suter, 6 years ago) ( diff )

Extension Point : IEmailAddressResolver


The IEmailAddressResolver is a fallback mechanism for determining which email address should be used to send notifications.


Trac provides an extendible and flexible notification system, that historically has sent emails to the email address specified in the user preferences or in the CC, reporter or author fields.

Now plugins can add additional ways to find an email address for a Trac session that has no email address specified in the user preferences.


Implementing the interface follows the standard guidelines found in TracDev/ComponentArchitecture and of course TracDev/PluginDevelopment.

The get_address_for_session() method returns the email address for the given session or None. The parameters are:

  • sid: The Trac session ID.
  • authenticated: 1 if the Trac session ID is authenticated, 0 otherwise.


The following naively uses LDAP to retrieve the email address.

import ldap

from trac.core import *
from trac.notification.api import IEmailAddressResolver

class LdapEmailAddressResolver(Component):


    # IEmailAddressResolver methods
    def get_address_for_session(self, sid, authenticated):
        address = None
        ld = ldap.initialize('ldap://localhost:1390')
        for dn, entry in ld.search_s('ou=people,dc=example,dc=com',
                                     '(cn=%s)' % sid,
            if 'mail' in entry:
                address = entry['mail']
        return address

Available Implementations

Additional Information and References

  • epydoc
  • API Reference
  • Related tickets:
    • #2766 introduced the ignore_domains option after so user names that look like email addresses are recognized correctly.
    • #4372 introduced the admit_domains option so email addresses with uncommon domains are recognized correctly.


  • This interface originated in th:AnnouncerPlugin as IAnnouncementAddressResolver.
  • 1.1.3: Integrated IEmailAddressResolver in Trac as part of this proposal (#3517)
    • Renamed get_address_for_name() to get_address_for_session().
Note: See TracWiki for help on using the wiki.