diff options
author | Barry Warsaw <barry@python.org> | 1999-01-14 19:59:58 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 1999-01-14 19:59:58 (GMT) |
commit | 8a578436f493251ae912bc1e1ef09abc38a10316 (patch) | |
tree | dc96776a02dc2bfb5ab2b46bf7b13acd9ab656e2 /Lib/rfc822.py | |
parent | f8ebb5521d7058fa108e80a40b292416ea5aa5ee (diff) | |
download | cpython-8a578436f493251ae912bc1e1ef09abc38a10316.zip cpython-8a578436f493251ae912bc1e1ef09abc38a10316.tar.gz cpython-8a578436f493251ae912bc1e1ef09abc38a10316.tar.bz2 |
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
Diffstat (limited to 'Lib/rfc822.py')
-rw-r--r-- | Lib/rfc822.py | 33 |
1 files changed, 21 insertions, 12 deletions
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 @@ 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): |