python - 使用 python 3“序列项 0:预期的 str 实例,找到的字节”接收邮件时出错
问题描述
我正在尝试使用 poplib 在 python 上接收电子邮件,当我运行代码时,我不断收到以下输出sequence item 0: expected str instance, bytes found
。这是整个代码,如果有人知道打印接收邮件的更简单的方法,如果您能发表评论,我将不胜感激。我还希望能够仅打印确定电子邮件的电子邮件。谢谢你。
import poplib
from email import parser
pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('mail@gmail.com')
pop_conn.pass_('password')
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
print(message.keys())
for message in messages:
print(message['subject'])
print(message.get_payload())
pop_conn.quit()
解决方案
问题出现在您的行中
messages = ["\n".join(mssg[1]) for mssg in messages]
在这里,您尝试加入"\n"
which 是一个字符串,mssg[1]
从技术上讲,它是一个列表,并且它包含字节字符串。要使该特定行工作,您可以messages = [b"\n".join(mssg[1]) for mssg in messages]
(注意 b)使其工作。parsestr()
但是,在调用of时,您将再次遇到问题Parser
,因为您要对其进行解析的又是mssg[1]
,这不是字符串。查看它的文档email.Parser
应该有一个接受字节而不是字符串作为输入的函数。
我个人也会使用 IMAP 而不是 POP。
推荐阅读
- google-sheets - 我可以将 =QUERY 的“查询”部分放在单元格中吗?
- php - 如何使用嵌套的for循环在php中制作以下模式
- c - CS50 决选:投票算法将决选中选民的投票偏好制表
- r - 如何识别重复的单词以及句子中重复的位置和数量
- python - 网络爬虫 API
- flutter - Flutter:如何从 ExpansionPanelList 中删除高度?
- flutter - image_size_getter 安装错误(因为来自 sdk 的 flutter_test 的每个版本都取决于集合 [...])[flutter]
- cuda - 线程的维度性质与 CUDA 中数据本身的维度之间有什么相关性?
- python - DocType 在模块视图下不可见
- ios - 在 Swift 5 中传递用户通知时自动执行任务