下载使用 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'])))
我有一个代码有问题,该代码应该以 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'])))