Originally i wanted to filter based on hudson.model.User and be independent of MailAddressResolver and any particular transport. However, because of the way MailSender.createEmptyMail() works it would have meant refactoring the code quiet some. [Which is probably not a good idea for a first time contribution]  

To to simplify things, the implementation simply hooks in after Set<InternetAddress> rcp is built. This way, the Extensions are only called once when an email is being built (unlike having to call the extensions at different points e.g.: for predefined recipients and culprits).

So the problem with using InternetAddress which you pointed out already exists where the new ExtensionPoint was added - just before msg.setRecipients(). And it is unfornutelay not obvious to me how to improve this without changing too much in the code.

Otherwise, the change above works quiet well. We are currently using it with an internal plugin that checks culprits against group membership and project being built.