Edgewall Software

Ticket #6078: recursive-multiple-email-addresses.diff

File recursive-multiple-email-addresses.diff, 2.1 KB (added by jsiirola@…, 4 years ago)

Patch against 0.11-stable to recursively resolve multiple email addresses

  • trac/notification.py

     
    279279 
    280280        if not is_email(address): 
    281281            if address == 'anonymous': 
    282                 return None 
     282                return [None] 
    283283            if self.email_map.has_key(address): 
    284                 address = self.email_map[address] 
     284                _addrList = [] 
     285                _raw = [x.strip() for x in self.email_map[address].split(',')] 
     286                for x in _raw: 
     287                    _addrList.extend(self.get_smtp_address(x)) 
     288                return _addrList 
    285289            elif NotifyEmail.nodomaddr_re.match(address): 
    286290                if self.config.getbool('notification', 'use_short_addr'): 
    287                     return address 
     291                    return [address] 
    288292                domain = self.config.get('notification', 'smtp_default_domain') 
    289293                if domain: 
    290294                    address = "%s@%s" % (address, domain) 
    291295                else: 
    292296                    self.env.log.info("Email address w/o domain: %s" % address) 
    293                     return None 
     297                    return [None] 
    294298 
    295299        mo = self.shortaddr_re.search(address) 
    296300        if mo: 
    297             return mo.group(0) 
     301            return [mo.group(0)] 
    298302        mo = self.longaddr_re.search(address) 
    299303        if mo: 
    300             return mo.group(2) 
     304            return [mo.group(2)] 
    301305        self.env.log.info("Invalid email address: %s" % address) 
    302         return None 
     306        return [None] 
    303307 
    304308    def encode_header(self, key, value): 
    305309        if isinstance(value, tuple): 
     
    347351 
    348352        def build_addresses(rcpts): 
    349353            """Format and remove invalid addresses""" 
    350             return filter(lambda x: x, \ 
    351                           [self.get_smtp_address(addr) for addr in rcpts]) 
     354            _addrList=[] 
     355            for x in rcpts: 
     356                _addrList.extend(self.get_smtp_address(x)) 
     357            return filter(lambda x: x, _addrList) 
    352358 
    353359        def remove_dup(rcpts, all): 
    354360            """Remove duplicates"""