From 8a907f9ff29020bad0471adc5a12df2dff785789 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Wed, 23 Jan 2013 23:41:50 -0500 Subject: [PATCH] email: Fix _flatten() implementation for non-ASCII bodies The email header should be flattened to ASCII with funky encoded headers [1], but the body may be encoded in a non-ASCII-compatible charset (e.g. UTF-16-LE). The old _flatten() implementation used the body charset to encode the entire message, which could garble the header. This patch uses BytesGenerator, which takes advantage of email.charset.Charset's separate fields for the header encoding and body encoding. [1]: http://docs.python.org/3/library/email.header.html Signed-off-by: W. Trevor King --- rss2email/email.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rss2email/email.py b/rss2email/email.py index 4fac799..8bf3eb6 100644 --- a/rss2email/email.py +++ b/rss2email/email.py @@ -21,10 +21,12 @@ from email.charset import Charset as _Charset import email.encoders as _email_encoders +from email.generator import BytesGenerator as _BytesGenerator from email.header import Header as _Header from email.mime.text import MIMEText as _MIMEText from email.utils import formataddr as _formataddr from email.utils import parseaddr as _parseaddr +import io as _io import smtplib as _smtplib import subprocess as _subprocess @@ -226,7 +228,10 @@ def _flatten(message): b'' b"\x00Y\x00o\x00u\x00'\x00r\x00e\x00 \x00g\x00r\x00e\x00a\x00t\x00,\x00 \x00\x96\x03\xb5\x03\xcd\x03\xc2\x03!\x00\\\x00n\x00" """ - return message.as_string().encode(str(message.get_charset())) + bytesio = _io.BytesIO() + generator = _BytesGenerator(bytesio) # use policies for Python >=3.3 + generator.flatten(message) + return bytesio.getvalue() def sendmail_send(sender, recipient, message, config=None, section='DEFAULT'): if config is None: -- 2.26.2