Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用Pyzmail模块递归获取电子邮件正文_Python 3.x_Email_Imap - Fatal编程技术网

Python 3.x 使用Pyzmail模块递归获取电子邮件正文

Python 3.x 使用Pyzmail模块递归获取电子邮件正文,python-3.x,email,imap,Python 3.x,Email,Imap,我正在尝试创建一个应用程序,它需要递归地检查新电子邮件的电子邮件地址,然后做一些其他事情;不过,我在获取邮件正文方面遇到了一些问题。我将pyzmail模块与imapclient一起使用,并将枯燥的工作自动化以获得指导(使用python 3.6)。这是我的密码: mail = imapclient.IMAPClient('imap.gmail.com', ssl=True) mail.login('email', 'password') mail.select_folder('INBOX', re

我正在尝试创建一个应用程序,它需要递归地检查新电子邮件的电子邮件地址,然后做一些其他事情;不过,我在获取邮件正文方面遇到了一些问题。我将pyzmail模块与imapclient一起使用,并将枯燥的工作自动化以获得指导(使用python 3.6)。这是我的密码:

mail = imapclient.IMAPClient('imap.gmail.com', ssl=True)
mail.login('email', 'password')
mail.select_folder('INBOX', readonly=False)
uid = mail.gmail_search('NC')
for i in uid:
   message = mail.fetch(i, ['BODY[]'], 'FLAGS')
   msg = pyzmail.PyzMessage.factory(message[i][b'BODY[]'])
   msg.html_part.get_payload().decode(msg.text_part.charset)
但它不起作用。我基本上已经尝试过这种代码的不同形式,但都没有用,而且没有太多的例子可以帮助我。我有点像python新手。有人能帮忙吗? 谢谢

编辑

我意识到我犯了一个错误,并修复了一些代码:

server = imapclient.IMAPClient('imap.gmail.com', ssl=True)
server.login('p.imagery.serv@gmail.com', 'rabbitrun88ve')
server.select_folder('INBOX', readonly=True)
uids = server.gmail_search('NC')
for i in uids:
    messages = server.fetch(i, ['BODY[]'])
    msg = pyzmail.PyzMessage.factory(messages[b'BODY[]'])
我遇到的问题是最后一行,我不知道如何使用迭代器创建的变量输入。它发出这样的信息:

ValueError: input must be a string a bytes, a file or a Message

我不确定你是否仍然有这个问题,但对于那些将来可能有类似问题的人来说。 我注意到最后一行有点遗漏,这可能是罪魁祸首

msg = pyzmail.PyzMessage.factory(messages[b'BODY[]'])
您省略了for循环的'i'变量

msg = pyzmail.PyzMessage.factory(messages[i][b'BODY[]'])

我想执行下一步以获取搜索邮件的正文:

    server = imapclient.IMAPClient('imap.gmail.com', ssl=True)
    server.login('p.imagery.serv@gmail.com', 'rabbitrun88ve')
    server.select_folder('INBOX', readonly=True)
    uids = server.gmail_search('NC')
    rawmessage = server.fetch(uids, ['BODY[]'])
    for i in rawmessage:
        msg = pyzmail.PyzMessage.factory(rawmessage[i][b'BODY[]'])
        msg.html_part.get_payload().decode(msg.text_part.charset)

在这种情况下,您可以对带有正文的回执电子邮件进行迭代。我检查了类似的示例,但我使用了
text\u part.get\u payload()
而不是
html
来说明服务器的功能

我不明白你说的“递归”是什么意思。您的问题陈述中没有递归。@Max我正在尝试提取以NC为主题的电子邮件的内容。所以如果有3封关于这个主题的邮件,我想提取这些信息。示例:如果一封电子邮件的内容是“你好,这是一个测试”,那么这就是我想要的。也许我递归地用错了这个词。很抱歉。