下载使用 UTF-8 B 编码的电子邮件 header

Downloading emails with UTF-8 B encoded header

我有一个代码有问题,该代码应该以 eml 文件的形式下载您的电子邮件。

它应该通过收件箱电子邮件列表,检索电子邮件内容和附件(如果有)并创建一个包含所有内容的 .eml 文件。

它的作用是处理文本的内容类型和大多数多部分。如果列表中的电子邮件在其 header 中包含 utf-8B,它就像电子邮件列表的末尾一样,不会显示任何错误。

有问题的代码是:

result, data = p.uid('search',None, search_criteria) # search_criteria is defined earlier in code
if result == 'OK':
  data = get_newer_emails_first(data) # get_newer_emails_first() is a function defined to return the list of UIDs in reverse order (newer first)

  context['emailsum'] = len(data) # total amount of emails based on the search_criteria parameter.
for num in data:
  mymail2 = {}
  result,data1 = p.iud('fetch', num, '(RFC822)')
  email_message = email.message_from_bytes(data[0][1])
  fullemail = email_message.as_bytes()

  default_charset = 'ASCII' 
  if email_message.is_multipart():
     m_subject = make_header(decode_header(email_message['Subject']))
  else:
     m_subject = r''.join([ six.text_type(t[0], t[1] or default_charset) for t in email.header.decode_header(email_message['Subject']) ])

m_from = string(make_header(decode_header(email_message['From'])))
m_date = email_message['Date']

我已经完成测试,发现虽然 fullemail 变量正确包含电子邮件(因此它成功地从实际电子邮件中读取数据),但问题应该在紧接着的 if else 中,但我找不到什么问题是。

有什么想法吗?

PS: 我不小心以访客的身份发布了这个问题,但我选择删除它并从我的帐户重新发布。

显然我的代码中的错误以最愚蠢的方式存在。

而不是:

m_from = string(make_header(decode_header(email_message['From'])))
m_date = email_message['Date']

应该是:

m_from = str(make_header(decode_header(email_message['From'])))
m_date = str(make_header(decode_header(email_message['Date'])))