首页 > 解决方案 > 下载带有 UTF-8 B 编码标头的电子邮件

问题描述

我的代码有问题,该代码应该在 eml 文件中下载您的电子邮件。

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

它的作用是它适用于文本的内容类型和大多数多部分。如果列表中的电子邮件在其标题中包含 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:我不小心以访客身份发布了这个问题,但我选择将其删除并从我的帐户中重新发布。

标签: pythonpython-3.xemaileml

解决方案


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

代替:

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'])))

推荐阅读