2017-06-13 119 views
0

我正在尝试创建一个应用程序,需要递归检查新电子邮件的电子邮件地址,然后执行其他一些操作;不过,我在获取电子邮件正文时遇到了一些问题。我在imapclient旁边使用了pyzmail模块,并且使用了自动化镗孔工具(python 3.6)。这是我的代码:通过Pyzmail模块递归获取电子邮件正文

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) 

但它不工作。我基本上已经尝试过不同形式的代码,但无济于事,真的没有那么多可以帮助我的例子。我有点蟒蛇新手。任何人都可以帮忙吗? 谢谢,

编辑

我意识到,我犯了一个错误,并固定了一下代码:

server = imapclient.IMAPClient('imap.gmail.com', ssl=True) 
server.login('[email protected]', '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 
+0

我没有看到你的“递归”在这里的意思。你的问题陈述中没有递归。 – Max

+0

@Max我正在尝试将包含NC的电子邮件的内容作为主题。所以如果有3封电子邮件涉及这个主题,我想提取这些信息。例如:如果一封电子邮件的内容是“你好,这是一个测试”,那么这就是我想要的。也许我用递归的术语来说是错误的。对于那个很抱歉。 –

回答

0

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

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

你省略的字母“i”变量循环

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