]> granicus.if.org Git - python/commitdiff
Message.getaddrlist(): This now handles multiple occurances of the
authorBarry Warsaw <barry@python.org>
Thu, 14 Jan 1999 19:59:58 +0000 (19:59 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 14 Jan 1999 19:59:58 +0000 (19:59 +0000)
named header, so that if a message has, e.g. multiple CC: lines, all
will get returned by the call to getaddrlist().  It also correctly
handles addresses which show up in continuation lines.

AdderlistClass.__init__(): Added \n to self.CR which fixes a bug that
sometimes, an address would contain a bogus trailing newline.

Message.getaddress(): In final else clause, added a test for the
character we're at being in self.specials.  Without this, such
characters never get consumed and we infloop.  Case in point (as
posted to c.l.py):

To: <[smtp:dd47@mail.xxx.edu]_at_hmhq@hdq-mdm1-imgout.companay.com>
----------------------------^
otherwise we'd infloop here

Lib/rfc822.py

index d8de862cfa6deab1333c1046eab9f3ffac9597a6..86727d0b233106dcd176c5c801c18219e0b99aff 100644 (file)
@@ -298,16 +298,25 @@ class Message:
     
     def getaddrlist(self, name):
         """Get a list of addresses from a header.
-        
-        Retrieves a list of addresses from a header, where each
-        address is a tuple as returned by getaddr().
+
+        Retrieves a list of addresses from a header, where each address is a
+        tuple as returned by getaddr().  Scans all named headers, so it works
+        properly with multiple To: or Cc: headers for example.
+
         """
-        # New, by Ben Escoto
-        try:
-            data = self[name]
-        except KeyError:
-            return []
-        a = AddrlistClass(data)
+        raw = []
+        for h in self.getallmatchingheaders(name):
+           if h[0] in ' \t':
+               raw.append(h)
+           else:
+               if raw:
+                   raw.append(', ')
+                i = string.find(h, ':')
+                if i > 0:
+                    addr = h[i+1:]
+                raw.append(addr)
+        alladdrs = string.join(raw, '')
+        a = AddrlistClass(alladdrs)
         return a.getaddrlist()
     
     def getdate(self, name):
@@ -465,9 +474,8 @@ class AddrlistClass:
         self.specials = '()<>@,:;.\"[]'
         self.pos = 0
         self.LWS = ' \t'
-        self.CR = '\r'
+        self.CR = '\r\n'
         self.atomends = self.specials + self.LWS + self.CR
-        
         self.field = field
         self.commentlist = []
     
@@ -539,6 +547,8 @@ class AddrlistClass:
         else:
             if plist:
                 returnlist = [(string.join(self.commentlist), plist[0])]
+            elif self.field[self.pos] in self.specials:
+                self.pos = self.pos + 1
         
         self.gotonext()
         if self.pos < len(self.field) and self.field[self.pos] == ',':
@@ -618,7 +628,6 @@ class AddrlistClass:
             elif self.field[self.pos] in self.atomends:
                 break
             else: sdlist.append(self.getatom())
-        
         return string.join(sdlist, '')
     
     def getdelimited(self, beginchar, endchars, allowcomments = 1):