Python 3 smtplib отправляет с unicode символами

Я работал со многими встроенными системами, где предупреждения приведут к нестабильности, катастрофическому отказу или повреждению памяти. Если Вы не знаете, что предупреждение безвредно, с ним нужно иметь дело.

8
задан agf 28 September 2011 в 18:22
поделиться

3 ответа

The key is in the docs:

class email.mime.text.MIMEText(_text, _subtype='plain', _charset='us-ascii')

A subclass of MIMENonMultipart, the MIMEText class is used to create MIME objects of major type text. _text is the string for the payload. _subtype is the minor type and defaults to plain. _charset is the character set of the text and is passed as a parameter to the MIMENonMultipart constructor; it defaults to us-ascii. No guessing or encoding is performed на текстовых данных.

Итак, что вам нужно, очевидно, не msg = MIMEText ('€ 10') , а скорее:

msg = MIMEText('€10'.encode('utf-8'), _charset='utf-8')

Хотя не все это четко задокументировано, sendmail нуждается в байтовой строке, а не в Unicode (это то, что определяет протокол SMTP); посмотрите, как msg.as_string () выглядит для каждого из двух способов его построения - учитывая «без угадывания или кодирования», в вашем способе все еще присутствует символ евро (и нет возможности для sendmail, чтобы превратить его в строку байтов), мой - нет (и utf-8 четко указан повсюду).

13
ответ дан 5 December 2019 в 10:43
поделиться

_charset параметр MIMEText по умолчанию us-ascii согласно docs . Поскольку не из набора us-ascii, он не работает.

пример в документах, которые вы пробовали, четко заявляет:

В этом примере предположим, что текстовый файл содержит только Символы ASCII.

Вы можете использовать метод .get_charset в своем сообщении, чтобы исследовать кодировку, кстати, есть и .set_charset .

2
ответ дан 5 December 2019 в 10:43
поделиться

У Гаса Мюллера была аналогичная проблема: http://bugs.python.org/issue4403

1
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: