尝试获得重复的代码以在满足条件后退出Gmail

问题描述

使用以下代码

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()

目标是创建一个可以在不在办公室计算机时在后台运行的程序,使我可以在需要时运行某些进程。

我遇到的问题是代码

  1. 似乎没有刷新收件箱中的电子邮件列表(即,如果我发送带有主题的电子邮件 应该会触发响应,但是什么也不会发生(尽管如果电子邮件已经在收件箱中, 我启动代码确实发生))。

  2. 在成功完成一次操作后,我想不出一种退出代码方法。因此,基本上,我试图让它搜索特定的键,然后一旦找到该键并执行了任务,便会停止搜索该键。

解决方法

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

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上运行的脚本将对其进行检测并为我执行该过程。

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