diff options
author | Barry Warsaw <barry@python.org> | 2002-09-10 16:13:45 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2002-09-10 16:13:45 (GMT) |
commit | b1c1de3805590f5f67ed2aedd9bd471c81cca011 (patch) | |
tree | 94f208faed4b2d4ee0620eaa4068e1ff04f5b133 | |
parent | 356afac41ff5384e8c82236f9fae162cf83d0559 (diff) | |
download | cpython-b1c1de3805590f5f67ed2aedd9bd471c81cca011.zip cpython-b1c1de3805590f5f67ed2aedd9bd471c81cca011.tar.gz cpython-b1c1de3805590f5f67ed2aedd9bd471c81cca011.tar.bz2 |
Import _isstring() from the compatibility layer.
_handle_text(): Use _isstring() for stringiness test.
_handle_multipart(): Add a test before the ListType test, checking for
stringiness of the payload. String payloads for multitypes means a
message with broken MIME chrome was parsed by a lax parser. Instead
of raising a BoundaryError in those cases, the entire body is assigned
to the message payload (but since the content type is still
multipart/*, the Generator needs to be updated too).
-rw-r--r-- | Lib/email/Generator.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/Lib/email/Generator.py b/Lib/email/Generator.py index 8ce3807..e8bce10 100644 --- a/Lib/email/Generator.py +++ b/Lib/email/Generator.py @@ -8,11 +8,17 @@ import time import re import random -from types import ListType, StringType +from types import ListType from cStringIO import StringIO from email.Header import Header +try: + from email._compat22 import _isstring +except SyntaxError: + from email._compat21 import _isstring + + EMPTYSTRING = '' SEMISPACE = '; ' BAR = '|' @@ -187,7 +193,7 @@ class Generator: cset = msg.get_charset() if cset is not None: payload = cset.body_encode(payload) - if not isinstance(payload, StringType): + if not _isstring(payload): raise TypeError, 'string payload expected: %s' % type(payload) if self._mangle_from_: payload = fcre.sub('>From ', payload) @@ -209,6 +215,10 @@ class Generator: print >> self._fp, '\n' print >> self._fp, '--' + boundary + '--' return + elif _isstring(subparts): + # e.g. a non-strict parse of a message with no starting boundary. + self._fp.write(subparts) + return elif not isinstance(subparts, ListType): # Scalar payload subparts = [subparts] |