如何使用python迭代收件箱中的每封电子邮件?

时间:2010-06-06 09:02:14

标签: python email iterator imaplib

我是编程新手,我正在尝试构建一个autorespoder来将msg发送到特定的电子邮件地址。

使用if语句,我可以检查收件箱中是否有来自某个地址的电子邮件,我可以发送电子邮件,但如果该地址有多封电子邮件,我该如何制作for循环来发送来自该特定地址的每封电子邮件的电子邮件。

我尝试将其用作循环:

for M.search(None, 'From', address) in M.select(): 

但我得到错误:“无法分配到该行的函数调用”

1 个答案:

答案 0 :(得分:4)

正如您声称自己是编程新手,我最好的建议是:始终阅读文档。

也许你应该首先阅读tutorial


documentation提供了一个示例:

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 loop时,应该是:

for x in some_data_set:

x是一个变量,它一次保存一个项的值(并且只能在for循环体中访问(有一个例外,但这在这里并不重要)。)。

您正在做的事与imaplib模块无关,只是语法错误。

顺便说一下。 .select()选择一个邮箱,只返回邮箱中的邮件数。即只是一个标量值,没有可以迭代的序列:

  

IMAP4.select([mailbox [,readonly]])
  选择一个邮箱。返回的数据是邮箱中的邮件计数(EXISTS响应)。默认邮箱是“INBOX”。如果设置了只读标志,则不允许对邮箱进行修改。

(这确实与imaplib模块有关;))

相关问题