stmplib MIMEText charset weirdness
tjreedy at udel.edu
Tue Feb 26 20:46:14 CET 2013
On 2/25/2013 11:00 PM, Adam W. wrote:
> Can someone explain to me why I can't set the charset after the fact.
Email was revised to v.6 for 3.3, so the immediate answer to both your
why questions is 'because email was not revised yet'.
> text = MIMEText('❤¥'.encode('utf-8'), 'html')
In 3.3 this fails immediately with
AttributeError: 'bytes' object has no attribute 'encode'
because when _charset is not given, MIMEText.__init__ test encodes to
discover what it should be
if _charset is None:
_charset = 'us-ascii'
_charset = 'utf-8'
> text = MIMEText('❤¥'.encode('utf-8'), 'html', 'utf-8')
If one provides bytes, one must provide the charset and MIMEText assumes
you are not lying.
> Content-Type: text/html; charset="utf-8"
> MIME-Version: 1.0
> Content-Transfer-Encoding: base64
> Side question:
> text = MIMEText('❤¥', 'html')
This is redundant here. This method is inherited from Message and
appears pretty useless for the subclass.
> 'MIME-Version: 1.0\nContent-Transfer-Encoding: 8bit\nContent-Type:
> Why is it now 8-bit encoding?
Bug fixed in 3.3. Output now same as above. Use 3.3 for email unless you
cannot due to other dependencies not yet being available.
Terry Jan Reedy
More information about the Python-list