首页 > 解决方案 > 无限循环中的电子邮件监控。有什么缺点/更好的想法吗?

问题描述

我正在编写一个简短的脚本来监控我的收件箱,并在收到每封新电子邮件时收到通知。到目前为止,我正在使用这样的无限循环:

msg_id_check = None
while True:
    result, data = mail.fetch(mail.select('INBOX')[1][0], "(RFC822)")  # mail is an imaplib object
    msg_str = email.message_from_bytes(data[0][1])
    msg_id = get_email_id(msg_str.get('Received'))
    if msg_id == msg_id_check:  # Don't keep notifying me of the same email
        continue
    FROM = msg_str.get('From')
    SUBJECT = msg_str.get('Subject')
    BODY = get_body(msg_str).decode()
    print(f"Subject: {SUBJECT}\nFrom: {FROM}\nBody: {BODY}")
    msg_id_check = msg_id

我一开始以为我不能这样做,因为当我的计算机陷入无限循环时我听到了它的声音,听起来并不喜欢它,但是当我尝试这段代码时,我没有听到任何噪音我的电脑,所以我想知道,这是一个对 cpu 友好的过程,还是有更好的方法来收到每封收到的电子邮件的通知?

PS 现在我只是将新电子邮件打印到屏幕上,但在我的项目中,我需要处理这些电子邮件,我不想丢失任何这些电子邮件。

标签: pythonpython-3.xemailwhile-loopimaplib

解决方案


当您发送请求时,如果没有 awnser(可能是超时),您的程序不会走得更远,因此您的 while 循环中有一个“缓冲区”,但如果您有新邮件,您不需要知道每一秒,您应该放一个time.sleep(60)在循环结束时发送更少的无用请求


推荐阅读