summaryrefslogtreecommitdiffstats
path: root/Lib/email/generator.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/email/generator.py')
-rw-r--r--Lib/email/generator.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/Lib/email/generator.py b/Lib/email/generator.py
index de9da39..27dd0db 100644
--- a/Lib/email/generator.py
+++ b/Lib/email/generator.py
@@ -146,6 +146,19 @@ class Generator:
# BytesGenerator overrides this to encode strings to bytes.
return s
+ def _write_lines(self, lines):
+ # We have to transform the line endings.
+ if not lines:
+ return
+ lines = lines.splitlines(True)
+ for line in lines[:-1]:
+ self.write(line.rstrip('\r\n'))
+ self.write(self._NL)
+ laststripped = lines[-1].rstrip('\r\n')
+ self.write(laststripped)
+ if len(lines[-1])!=len(laststripped):
+ self.write(self._NL)
+
def _write(self, msg):
# We can't write the headers yet because of the following scenario:
# say a multipart message includes the boundary string somewhere in
@@ -217,7 +230,7 @@ class Generator:
payload = msg.get_payload()
if self._mangle_from_:
payload = fcre.sub('>From ', payload)
- self.write(payload)
+ self._write_lines(payload)
# Default body handler
_writeBody = _handle_text
@@ -256,7 +269,8 @@ class Generator:
preamble = fcre.sub('>From ', msg.preamble)
else:
preamble = msg.preamble
- self.write(preamble + self._NL)
+ self._write_lines(preamble)
+ self.write(self._NL)
# dash-boundary transport-padding CRLF
self.write('--' + boundary + self._NL)
# body-part
@@ -278,7 +292,7 @@ class Generator:
epilogue = fcre.sub('>From ', msg.epilogue)
else:
epilogue = msg.epilogue
- self.write(epilogue)
+ self._write_lines(epilogue)
def _handle_multipart_signed(self, msg):
# The contents of signed parts has to stay unmodified in order to keep
@@ -402,7 +416,7 @@ class BytesGenerator(Generator):
if _has_surrogates(msg._payload) and not self.policy.cte_type=='7bit':
if self._mangle_from_:
msg._payload = fcre.sub(">From ", msg._payload)
- self.write(msg._payload)
+ self._write_lines(msg._payload)
else:
super(BytesGenerator,self)._handle_text(msg)