这在 SO 中有广泛的介绍,所以我提前道歉......但是,我已经浏览了这些帖子并且无法让它发挥作用。
目标
想要从 gmail 获取符合特定条件的电子邮件,保存附件,然后删除它们。
ISSUE
所以,除了删除电子邮件之外,我可以让一切正常工作。它删除了一些然后我收到此错误:
回溯(最后一次调用):文件“get_overdues.py”,第 22 行,在 email_body = data[0][1] TypeError: 'NoneType' object is unsubscriptable
每次我运行它时,它都会删除更多电子邮件,然后以相同的错误退出。这必须在 cronjob 上运行并且不能作为保姆。
我究竟做错了什么?
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user,word)
m.select("INBOX")
searchString = "(SUBJECT \"Daily Mail Notices\")"
resp, items = m.search(None,searchString)
items = items[0].split()
for emailid in items:
print emailid
resp, data = m.fetch(emailid, "(RFC822)")
email_body = data[0][1]
mail = email.message_from_string(email_body)
if mail.get_content_maintype() != 'multipart':
continue
print "["+mail["From"]+"] :" + mail["Subject"] + mail["Date"]
sub_dir = re.sub('[,:\- ]','', mail["Date"])
for part in mail.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
message_dir = os.path.join(dump_dir, sub_dir)
if not os.path.exists(message_dir):
os.makedirs(message_dir)
filename = part.get_filename()
counter = 1
if not filename:
filename = 'overdues-%s' % counter
counter += 1
att_path = os.path.join(dump_dir, message_dir, filename)
if not os.path.isfile(att_path) :
fp = open(att_path, 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
m.store(emailid, '+FLAGS', r'(\Deleted)')
m.expunge()
m.close()
m.logout()