New submission from Shay Rojansky <[email protected]>:
This may be my misunderstanding of the correct behavior, thanks in advance for
your patience...
The issue happens when calling set_charset (or set_payload charset) after a
Message has already been created and contains a Content-Transfer-Encoding
header. Here's an example:
>>> from email.mime.text import MIMEText
>>>
>>> part = MIMEText('Some stuff aéàçça', 'plain', 'utf-8')
>>> print part
>From nobody Mon Feb 14 19:57:17 2011
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
U29tZSBzdHVmZiBhw6nDoMOnw6dh
>>> part.set_payload('Other stuff aéàçça', 'utf-8')
>>> print part
>From nobody Mon Feb 14 19:57:25 2011
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Other stuff aéàçça
>>>
>>> del part['Content-Transfer-Encoding']
>>> part.set_payload('Still some other stuff aéàçça', 'utf-8')
>>> print part
>From nobody Mon Feb 14 19:57:40 2011
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
U3RpbGwgc29tZSBvdGhlciBzdHVmZiBhw6nDoMOnw6dh
First the text part is created with charset UTF-8, a dump shows a
properly-encoded base64 UTF-8 part.
Then an attempt is made to modify the payload. The set_charset documentation
clearly states that the message will be properly encoded/converted, but we get
a malformed part with Content-Transfer-Endogin=base64 but without a
base64-encoded payload.
Finally, as a workaround, I delete the Content-Transfer-Encoding header and try
again, at which point the new payload is properly encoded.
Again, I'm sure there are reasons for this behavior, which nevertheless seems
like a bug to me (shouldn't set_charset perform base64 and change the
Content-Transfer-Encoding if necessary regardless of previous headers?). Maybe
a documentation update would help people with this.
Thank you very much!
----------
components: Library (Lib)
messages: 128573
nosy: Shay.Rojansky
priority: normal
severity: normal
status: open
title: email.message.Message set_charset does not encode properly?
type: behavior
versions: Python 2.6, Python 3.1
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue11216>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com