尝试获取重复代码以在满足条件后退出(Gmail)
Trying to get a repeating code to exit once conditions have been met (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()
我的目标是创建一个程序,当我不在办公室计算机旁时,我可以在后台运行 运行ning,这样我就可以在需要时 运行 某些进程。
我遇到的问题是代码:
似乎没有刷新收件箱中的电子邮件列表(即,如果我发送带有主题的电子邮件
这应该触发响应,什么都不会发生(尽管如果电子邮件已经在收件箱中
我启动代码,响应 确实 发生了))。
我想不出让代码在成功完成一次操作后退出的方法。所以基本上我试图让它搜索一个特定的键,然后一旦它找到那个键并执行了一个任务,它就会停止搜索这个键。
好吧,这是一个死线程,但我想我会 post 我为这个问题找到的“工作”脚本:
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)
所以我说“有效”的原因是因为这个脚本有效,但我不完全确定为什么。原始脚本实际上仍然不会停止 运行ning,但它会停止 运行ning 原始脚本调用的 Restart_Printer.py 脚本(我猜这是因为 Restart_Printer.py 脚本中没有任何 end() 或 sys.exit 命令,因此原始脚本可能正在尝试启动已经激活的脚本。
但是是的,这个脚本基本上会搜索您的电子邮件,直到从特定电子邮件地址(我使用个人备用电子邮件地址)找到特定的 key-word(在本例中,主题行是“Test2”)。这里的想法是,当我不在办公室时,有人给我发消息说“嘿,复印机已停止运行(我们使用的垃圾的常见问题)”,我可以快速发送 key-word 到我的电子邮件地址,我的 cpu 上的脚本 运行ning 将检测到它并为我执行该过程。
使用它作为模板,您应该能够设置您希望计算机远程 运行 的任何其他进程,所以请随意使用它!
使用以下代码:
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()
我的目标是创建一个程序,当我不在办公室计算机旁时,我可以在后台运行 运行ning,这样我就可以在需要时 运行 某些进程。
我遇到的问题是代码:
似乎没有刷新收件箱中的电子邮件列表(即,如果我发送带有主题的电子邮件 这应该触发响应,什么都不会发生(尽管如果电子邮件已经在收件箱中 我启动代码,响应 确实 发生了))。
我想不出让代码在成功完成一次操作后退出的方法。所以基本上我试图让它搜索一个特定的键,然后一旦它找到那个键并执行了一个任务,它就会停止搜索这个键。
好吧,这是一个死线程,但我想我会 post 我为这个问题找到的“工作”脚本:
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)
所以我说“有效”的原因是因为这个脚本有效,但我不完全确定为什么。原始脚本实际上仍然不会停止 运行ning,但它会停止 运行ning 原始脚本调用的 Restart_Printer.py 脚本(我猜这是因为 Restart_Printer.py 脚本中没有任何 end() 或 sys.exit 命令,因此原始脚本可能正在尝试启动已经激活的脚本。
但是是的,这个脚本基本上会搜索您的电子邮件,直到从特定电子邮件地址(我使用个人备用电子邮件地址)找到特定的 key-word(在本例中,主题行是“Test2”)。这里的想法是,当我不在办公室时,有人给我发消息说“嘿,复印机已停止运行(我们使用的垃圾的常见问题)”,我可以快速发送 key-word 到我的电子邮件地址,我的 cpu 上的脚本 运行ning 将检测到它并为我执行该过程。
使用它作为模板,您应该能够设置您希望计算机远程 运行 的任何其他进程,所以请随意使用它!