summaryrefslogtreecommitdiffstats
path: root/Lib/rfc822.py
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>1999-01-14 19:59:58 (GMT)
committerBarry Warsaw <barry@python.org>1999-01-14 19:59:58 (GMT)
commit8a578436f493251ae912bc1e1ef09abc38a10316 (patch)
treedc96776a02dc2bfb5ab2b46bf7b13acd9ab656e2 /Lib/rfc822.py
parentf8ebb5521d7058fa108e80a40b292416ea5aa5ee (diff)
downloadcpython-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.py33
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):