Я вояю один скриптик и понадобилось сделать отправку на e-mail. Я его сделал, но не покидает ощущение костылей. В почтовой системе не всегда корректно отрабатываются письма в UTF-8, поэтому есть необходимость все элементы держать в koi8-r. Как я понял, в семействе модулей email для этого используется объект Charset, которым можно управлять кодировкой сообщения и способами кодировки. У email.message.Message есть метод set_charset(charset), который, как я понял, и устанавливает глобальные настройки сообщения. В мануале
Set the character set of the payload to charset, which can either be a Charset instance (see email.charset), a string naming a character set, or None.Т.е. я могу туда поставить текстовое имя кодировки или настроенный объект Charset со всеми исходными/получаемыми кодировками, преобразователями кодировок и упаковщиками. Но этот код
import email
import email.message
import email.header
import email.charset
import email.mime.audio
import email.mime.base
import email.mime.image
import email.mime.multipart
import email.mime.text
import smtplib
message = email.mime.multipart.MIMEMultipart()
cnvt = email.charset.Charset()
cnvt.input_charset='utf-8'
cnvt.output_charset='koi8-r'
cnvt.input_codec='utf8'
cnvt.output_codec='koi8_r'
cnvt.header_encoding = email.charset.BASE64
cnvt.body_encoding = email.charset.BASE64
message.set_charset(cnvt)
Traceback (most recent call last):
File "/home/dberkovich/eclipse/workspace/PyDev/IronLogs/src/pymail.py", line 25, in <module>
message.set_charset(cnvt)
File "/usr/lib/python2.6/email/message.py", line 262, in set_charset
self._payload = charset.body_encode(self._payload)
File "/usr/lib/python2.6/email/charset.py", line 384, in body_encode
s = self.convert(s)
File "/usr/lib/python2.6/email/charset.py", line 267, in convert
return unicode(s, self.input_codec).encode(self.output_codec)
TypeError: coercing to Unicode: need string or buffer, list found
Спасибо!