Iam正在使用带有IMAP4模块的Python3.6。Iam正在尝试将电子邮件从“收件箱”复制到“mytestfolder”。 我的回复是“OK”,但电子邮件本身没有被复制到“mytestfolder”。 其中,同一个代码段第一次为“someotherfolder”到“mytestfolder”工作时没有任何问题,之后就不工作了。下面是代码片段,请有人帮我解决这个问题
import config
import imaplib
from creds import username,password
imap = imaplib.IMAP4_SSL(config.imap_server,config.imap_port)
r, d = imap.login(username, password)
assert r == 'OK', 'login failed: %s' % str (r)
print(" > Signed in as %s" % username, d)
imap.select("Inbox")
r, d = imap.search(None, "ALL")
allIds = d[0].decode('utf8').split(' ')
''' Login works and iam getting msg_ids as well'''
for msg_id in allIds:
apply_lbl_msg = imap.uid('COPY', msg_id, 'mytestfolder')
if apply_lbl_msg[0] == 'OK':
mov, data = imap.uid('STORE', msg_id , '+FLAGS', '(\Deleted)')
imap.expunge()
TLDR:你把东西移走,然后按以前的顺序建立索引,这是计算错误
您的代码执行以下操作:
“给我收件箱中所有邮件的序列号”,这样你可以得到1、2、3、4、5等等。d中的最后一个数字将等于上面几行
select()
的返回值。然后循环,我将解释第一次迭代:“将第一封邮件复制到mytestfolder,如果可以的话…”
“…然后删除收件箱中的第一封邮件”,这意味着第二封邮件现在变成第一封
下一次迭代操作的是邮箱中当前第二封邮件,曾经是第三封邮件,因此您永远不会操作开始时为2的邮件。第三次迭代对当前是第三次的消息进行操作,并且曾经是。。。我想是第五个?没关系
您可以通过切换到相同的UID版本来更正此错误。UID不会随着重新编号而改变
您还可以通过发出一个复制所有消息的单一复制命令,然后发出一个将消息标记为已删除的单一存储,来纠正此错误并大大加快。您甚至不需要搜索,因为搜索结果只是从1到返回值
select()
的所有数字相关问题 更多 >
编程相关推荐