如何使用Python遍历收件箱中的每封邮件?

1 投票
1 回答
5913 浏览
提问于 2025-04-15 23:37

我刚开始接触编程,想做一个自动回复程序,能够给特定的邮箱发送消息。

我用一个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 模块有关;)

撰写回答