Python 试图让重复代码在满足条件后退出(Gmail)

Python 试图让重复代码在满足条件后退出(Gmail),python,gmail,imap,repeat,Python,Gmail,Imap,Repeat,使用以下代码: import imaplib import time user = '#my username' password = '#my password' server = 'imap.gmail.com' mailbox = 'Inbox' imap = imaplib.IMAP4_SSL(server) imap.login(user, password) while True: try: email_count = imap.select(mail

使用以下代码:

import imaplib
import time

user = '#my username'
password = '#my password'

server = 'imap.gmail.com'
mailbox = 'Inbox'

imap = imaplib.IMAP4_SSL(server)
imap.login(user, password)

while True:
    try:
        email_count = imap.select(mailbox, True)
        results, data = imap.search(None, '(FROM "#TestEmail" SUBJECT "Test")')
        print('starting search')
        ids = data[0]
        id_list = ids.split()
        latest_email_id = id_list[-1]
        result, data = imap.fetch(latest_email_id, "(RFC822)")
        raw_email = data[0][1]
        print(raw_email)

        print('email found, code will still run but no longer search')
        exit()
    except:
        print("no email found, continuing search")

    time.sleep(60)

exit()
目标是创建一个程序,当我不在办公室电脑前时,我可以在后台运行该程序,以便在需要时运行某些进程

我遇到的问题是,代码:

  • 似乎不会刷新收件箱中的电子邮件列表(即,如果我发送带有主题的电子邮件 这应该会触发一个响应,但不会发生任何事情(尽管当发送邮件时,电子邮件已经在收件箱中) 我启动代码,响应确实发生了)

  • 在代码成功完成一次操作后,我无法找到一种方法使代码退出。所以基本上我试图让它搜索一个特定的键,然后一旦它找到了这个键并执行了一项任务,它就会停止搜索这个键


  • 好吧,这是一个死线程,但我想我会发布我为这个问题找到的“工作”脚本:

    import imaplib
    import time
    import sys
    
    user = '#username'
    password = '#password'
    
    server = 'imap.gmail.com'
    mailbox = 'Inbox'
        
    
    
    
    
    while True:
    
        try:
            imap = imaplib.IMAP4_SSL(server)
            imap.login(user, password)
            
            email_count = imap.select(mailbox, True)
            results, data = imap.search(None, '(FROM "#username2" SUBJECT "Test2")')
            print('starting search')
            ids = data[0]
            id_list = ids.split()
            latest_email_id = id_list[-1]
            result, data = imap.fetch(latest_email_id, "(RFC822)")
            raw_email = data[0][1]
            print(raw_email)
           
            imap.logout()
    
            import Restart_Printer #this is a script that I have set up to restart my 
                                   #office printer
    
            sys.exit()
    
        except:
            print("no email found, continuing search")
    
        
        
        time.sleep(10)
    
    所以我之所以说“工作”是因为这个脚本工作,但我不完全确定为什么。原始脚本仍然不会真正停止运行,但它将停止运行原始脚本调用的Restart_Printer.py脚本(我猜这是因为Restart_Printer.py脚本中没有任何end()或sys.exit命令,因此原始脚本可能正在尝试启动一个已激活的脚本)

    但是,是的,这个脚本基本上会搜索你的电子邮件,直到它从一个特定的电子邮件地址(我使用个人备份电子邮件地址)中找到一个特定的关键字(在本例中,主题行是“Test2”)。这里的想法是,当我不在办公室时,有人给我发了一条消息说“嘿,复印机已经停止工作了(这是我们使用的垃圾邮件的一个常见问题)”,我可以把这个快捷关键字发送到我的电子邮件地址,我的cpu上运行的脚本将检测到它并为我执行这个过程

    使用此模板,您应该能够设置任何其他进程,您希望您的计算机远程运行,所以请随意使用它