python - 下载带有 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:我不小心以访客身份发布了这个问题,但我选择将其删除并从我的帐户中重新发布。
解决方案
显然,错误以最愚蠢的方式存在于我的代码中。
代替:
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'])))
推荐阅读
- spring-boot - Spring Security - 获取登录页面时,安全性尝试进行身份验证并返回 401 错误
- git - Github 上的贡献没有出现
- symfony - Symfony - 通过不包含密码字段的表单对部分用户实体更新的尴尬密码长度违规
- python - 如何在 Django 视图中正确序列化 API 响应
- ubuntu-20.04 - 我的 ubuntu 20.04 现在冻结了 30 多分钟。但时间已读,鼠标工作但不能点击。电源按钮不关闭
- typescript - 在 TypeScript 中,如何根据字段是否已定义来映射字段?
- spring-boot - 具有多个实体映射冲突的多个 JPA 存储库
- ruby - 初始化冰糕时如何忽略某些目录?
- c# - C#如何从代码中将另一个exe放入Windows启动中
- python - 图输入的神经网络架构