python使用IMAP监听传入的电子邮件

问题描述

我有以下这段代码,它每十秒钟连接并检查一次新电子邮件,但是由于某种原因,它不会刷新,因此无法正常工作。

import imaplib,imaplib2
import pprint
import os
import email
import time

imap_host = 'imap.gmail.com'
imap_user = 'user'
imap_pass = 'pass'
criteria = "ALL"

def if_latest_email(email_id: str) -> bool:
    with open(r'Email Bot/latest_email.txt','r+') as f:
        data = f.read()
        print(data)
        if data == email_id:
            return True
        else:
            f.seek(0)
            f.write(email_id)
            return False

imap = imaplib.IMAP4_SSL(imap_host,993)
imap.login(imap_user,imap_pass)
while 1:
    imap.select('Inbox')

    type,data = imap.search(None,criteria)
    imap_ids = data[0]
    id_list = imap_ids.split()
    
    for num in id_list:
        typ,data = imap.fetch(num,'(RFC822)')
        for response_part in data:
            if isinstance(response_part,tuple):
                raw_email_string = response_part[1].decode('utf-8')
                msg = email.message_from_string(raw_email_string)
                email_id = msg['Message-ID']
                print(msg['from'])
                if if_latest_email(email_id):
                    print('No new emails.')
                    break
                else:
                    print('New email:')
                email_subject = msg['subject']
                email_from = msg['from']
                print('From : ' + email_from + '\n')
                print('Subject : ' + email_subject + '\n')
        break
    time.sleep(60)

imap.logout()
imap.close()

我听说过imaplib的另一个版本-imaplib2添加了一个名为IDLE()的方法,该方法应该等待新的传入电子邮件,但是我有一些问题。任何想法?预先感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...