如何使用Python遍历收件箱中的每封邮件?
我刚开始接触编程,想做一个自动回复程序,能够给特定的邮箱发送消息。
我用一个if语句来检查收件箱里是否有来自某个地址的邮件,并且我可以发送邮件。但是如果有多个来自那个地址的邮件,我该怎么用for循环来给每一封来自那个特定地址的邮件都发送一封回复呢?
我试着用这个作为循环:
for M.search(None, 'From', address) in M.select():
但是我在那一行遇到了错误:“不能给函数调用赋值”。
1 个回答
7
既然你说你刚开始学习编程,我最好的建议就是:一定要阅读文档。
也许你应该先看看一个 教程。
这个 文档里有个例子:
import getpass, imaplib
M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
typ, data = M.fetch(num, '(RFC822)')
print 'Message %s\n%s\n' % (num, data[0][3])
M.close()
M.logout()
你试过吗?
关于你的代码:
当你定义一个 for
循环时,它应该是这样的:
for x in some_data_set:
x
是一个变量,它一次只保存一个项目的值(并且只能在 for 循环的内部使用(有一个例外,但这里不重要))。
你现在做的事情和 imaplib 模块没有关系,只是语法错误。
顺便说一下,.select()
是用来选择一个邮箱的,它只会返回邮箱里的邮件数量。也就是说,它只返回一个数字,而不是你可以遍历的序列:
IMAP4.select([mailbox[, readonly]])
选择一个邮箱。返回的数据是邮箱里的邮件数量(EXISTS 响应)。默认的邮箱是 'INBOX'。如果设置了只读标志,就不允许对邮箱进行修改。
(这确实和 imaplib 模块有关;)