如何让Python中监控邮箱的while循环实现动态更新
解决Gmail收件箱监控循环无法更新邮件数量的问题
你的代码核心问题是仅在循环启动前执行了一次邮件搜索,selected_mails变量存储的是首次查询的结果,循环内只是重复打印这个固定值,自然不会同步新邮件的变化。
修改后的代码
将邮件查询逻辑移到循环内部,同时添加查询间隔避免频繁请求:
import imaplib import time import os username = "example@gmail.com" app_password = "example" gmail_host = 'imap.gmail.com' # 初始化连接只执行一次 mail = imaplib.IMAP4_SSL(gmail_host) mail.login(username, app_password) mail.select() while True: # 每次循环重新查询收件箱邮件 _, selected_mails = mail.search(None, 'ALL') mail_count = len(selected_mails[0].split()) # 清除控制台旧输出,让显示更整洁 os.system('cls' if os.name == 'nt' else 'clear') print(f"当前收件箱邮件总数: {mail_count}") # 控制查询间隔,避免触发Gmail频率限制,可自行调整时长 time.sleep(5)
关键修改说明
- 把
mail.search(None, 'ALL')放入while True循环内,确保每次循环都拉取最新的邮件列表 - 添加
time.sleep()限制查询频率,防止因请求过于频繁被Gmail临时限制连接 - 加入控制台清屏逻辑,让邮件数量的更新显示更直观
额外注意事项
- 确认你的Gmail账户已开启IMAP功能,且使用的是应用专用密码(若开启了两步验证)
- 如果长时间运行后出现连接断开,可在循环内添加重连逻辑(捕获
imaplib.IMAP4.abort异常后重新登录)
内容的提问来源于stack exchange,提问作者Zen35X
相关产品推荐
相关产品推荐

