我有一些代码可以获取IMAP电子邮件并且在Python 2中运行得很好。在Python3中,我收到以下错误:
追踪(最近的呼叫最后):
文件“./mail.py”,第295行,在 项= return_message(x)的
在return_message中输入文件“./mail.py”,第122行 result,data = mail.fetch(message_id,“(RFC822)”)
文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py”,第460行,在获取中 typ,dat = self._simple_command(name,message_set,message_parts)
文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py”,第1113行,在_simple_command中 return self._command_complete(name,self._command(name,* args))
在_command中输入文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py”,第883行 data = data + b''+ arg
TypeError:无法将字节连接到int
return_message函数的代码:
result, data = mail.fetch(message_id, "(RFC822)")
raw_email = data[0][1]
email_message = email.message_from_string(raw_email)
运行时信息:
3.3.0(v3.3.0:bd8afb90ebf2,Sep 29 2012,01:25:11)
[GCC 4.2.1(Apple Inc. build 5666)(第3点)]
答案 0 :(得分:7)
message_set
是一个字符串,而不是int。来自documentation:
以下命令的
message_set
选项是一个字符串,指定要对其执行的一条或多条消息。它可能是一个简单的消息号('1'
),一系列消息号('2:4'
),或一组用逗号分隔的非连续范围('1:3,6:9'
)。范围可以包含星号以指示无限上限('3:*'
)。
直接将其转换为字符串就足够了:
result, data = mail.fetch(str(message_id), "(RFC822)")