Hi, On Wed, Apr 5, 2017 at 11:31 PM, Emmanuel BOUAZIZ <emmanuel.boua...@gmail.com> wrote: > I aligned on v1.2.1 when it was released and suddenly most users didn't get > notifications anymore. They were all users > that do not have an email address: we use the `use_short_addr` option so we > don't need to fill the email address. > > I noticed the modifications in ticket #12658 > > in `mail.py` in the `match_recipient()` function in `RecipientMatcher` : > > before #12658, a user with no email address would not appear in > `self.email_map` and `use_short_addr` or `smtp_default_domain` options would > be applied. > > Now, any authenticated user in the database will appear in `self.users` so > we always run the `if address in self.users:` branch for authenticated users > and never the `elif ...` branch and the `use_short_addr` or > `smtp_default_domain` options are never applied to these users. > > So this these options are broken now in this case.
Thanks for the investigating and the details. It seems another issue is introduced by r15356 for #12658. Could you try the attached patch? (authenticated-user-without-email.diff) I'll add unit tests if the patch works well. > I did not know if I should re-open the ticket or create a new one so I did > neither. > I also don't have a patch because the logic looks complicated with lots of > use-cases that I don't even know exist, sorry. Please create a new ticket about this issue. -- Jun Omae <jun6...@gmail.com> (大前 潤) -- You received this message because you are subscribed to the Google Groups "Trac Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to trac-dev+unsubscr...@googlegroups.com. To post to this group, send email to trac-dev@googlegroups.com. Visit this group at https://groups.google.com/group/trac-dev. For more options, visit https://groups.google.com/d/optout.
diff --git a/trac/notification/mail.py b/trac/notification/mail.py index 6c6adcfed..917597256 100644 --- a/trac/notification/mail.py +++ b/trac/notification/mail.py @@ -204,7 +204,7 @@ class RecipientMatcher(object): return self.notify_sys.smtp_default_domain def match_recipient(self, address): - if not address: + if not address or address == 'anonymous': return None def is_email(address): @@ -215,19 +215,17 @@ class RecipientMatcher(object): return False return True - if address == 'anonymous': - return None - sid = None - auth = 0 if address in self.users: sid = address auth = 1 - address = self.users[address][1] - if not address: - return sid, auth, None - elif not is_email(address) and self.nodomaddr_re.match(address): + address = (self.users[address][1] or '').strip() or sid + else: + sid = None + auth = 0 + + if not is_email(address) and self.nodomaddr_re.match(address): if self.use_short_addr: - return None, 0, address + return sid, auth, address if self.smtp_default_domain: address = "%s@%s" % (address, self.smtp_default_domain) else: