Message.getaddrlist(): This now handles multiple occurances of the
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
diff --git a/Lib/rfc822.py b/Lib/rfc822.py
index d8de862..86727d0 100644
--- a/Lib/rfc822.py
+++ b/Lib/rfc822.py
@@ -298,16 +298,25 @@
     
     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 @@
         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 @@
         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 @@
             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):