我有两个脚本;第一个检查我的电子邮件文件夹并将其写入文本文件:
def email_checker():
import imaplib
import textwrap
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('myemail@gmail.com', 'mypassword')
mail.list()
mail.select('inbox')
typ, data = mail.search(None, 'ALL')
my_file = open("email.txt", "w")
for num in data[0].split():
typ, newb = mail.fetch(num, '(RFC822)')
print ('Message %s\n%s\n' % (num, newb[0][1]))
my_file.write('Message %s\n%s\n' % (num, newb[0][1]))
#my_out = textwrap.wrap(str(('Message %s\n %s\n' % (num, newb[0][1]))),70)
#my_file.write(my_out)
mail.close()
my_file.close()
然后,第二个函数应该检查此文件以查找关键字。
def keyword_match (keyword):
with open("email.txt", "r") as openfile:
for line in openfile:
for part in line.split():
if part == keyword:
print ("working")
return True
else:
return False
问题是,即使使用我知道电子邮件中存在的单词,关键字匹配器也不会返回 True。
我曾尝试使用 textwrap (请参阅注释掉的代码),但它给了我一个错误 TypeError: must be str, not list
我在 Windows 8、64 位机器上使用 Python 3。
更新:
好的,所以我创建了一个带有“这是我的测试句子”的新文本文件,然后在其上运行“测试”的关键字匹配,这很有效。
email_checker 中的 print to 似乎工作正常,并打印出有关电子邮件的许多详细信息以及包含正在搜索的关键字的内容。
文本文件中的字符串似乎确实包含内容,所以我不认为它是我最初认为的 txt 文件中缺少内容的情况。
好的,我想我已经解决了。我更新的代码看起来像这样并且似乎可以工作。
def 关键字匹配(关键字):
使用 open("email.txt", "r") 作为 openfile: for line in openfile: for part in line.split():
if part == keyword: print ("working") return True break else: return False
最终更新:抱歉,我正在尝试将代码放入其中,但在接受什么作为代码片段时,它似乎有自己的想法。但基本上我在 if 之后放了一个 break 并将 else 两个步骤移出,以使其成为“for else 循环”