Я сохранил все сообщение как xx.eml, но в некоторых почтовых сообщениях сообщается, что почта кодируется с помощью base64 в первой строке, например:
charset="utf-8" Content-Transfer-Encoding: base64
charset="gb2312" Content-Transfer-Encoding: base64
Я пытался получить ключи body[0][1]
, но поле кодировки для передачи содержимого отсутствует (только тип содержимого).
Как мне обработать эту почту?
def saveMail(conn, num):
typ, body = conn.fetch(num, 'RFC822')
message = open(emldirPath + '\\' + num + '.eml', 'w+')
message.write(str(email.message_from_string(body[0][1])))
print email.message_from_string(body[0][1]).keys()
#['Received', 'Return-Path', 'Received', 'Received', 'Date', 'From', 'To',
# 'Subject', 'Message-ID', 'X-mailer', 'Mime-Version', 'X-MIMETrack',
# 'Content-Type', 'X-Coremail-Antispam']
message.close()
Я обнаружил проблему, это не проблема декодирования.
по электронной почте следующим образом:
------ = _ Part_446950_1309705579.1326378953207
Тип содержимого: текст / обычный текст;charset = GBK
Content-Transfer-Encoding: base64
что моя программа загружает:
------ = _ Part_446950_1309705579.1326378953207
Content-Type: text / plain;
charset = "utf-8"
Content-Transfer-Encoding: base64
Когда моя программа сохраняет файл .eml, она меняет строку после 'text / plain;'
, поэтому outlook express можетне разбираю почту, если я редактирую строку "" Content-Type: text / html; charset = "utf-8" ",
это работает
Теперь вопрос: как редактировать мойпрограмма, чтобы не дать ей изменить строку?