如果过去24小时未找到电子邮件,Python exchangelib将创建警报

问题描述

如果在过去24小时内未找到电子邮件,如何发出警报/例外?

这是打印的输出(如果找到电子邮件)。它会打印电子邮件地址主题计数。一行

defaultdict(,{('info@something.com','备份状态报告(错误):Tesla(D)(星期一,14/09/2020)'):1})

如果未找到任何内容,这是打印输出。

defaultdict(,{})

from exchangelib import Credentials,Account,UTC_NOW
from collections import defaultdict
from datetime import timedelta



credentials = Credentials('something@something.dk','private')
a = Account('something@something.dk',credentials=credentials,autodiscover=True)
counts = defaultdict(int)
testfolder = a.inbox.parent / 'Test'
since = UTC_NOW() - timedelta(hours=24)

for item in testfolder.all()\
        .only('sender','subject')\
        .filter(datetime_received__gt=since)\
        .order_by('-datetime_received'):
    if item.sender.email_address == 'info@something.com':
        counts[item.sender.email_address,item.subject] += 1
    if not testfolder.filter(datetime_received__gt=since,sender='info@something.com').exists():
                print('no email found')
print(counts)

以上代码已编辑为以下答案,但仍会打印空字典

解决方法

应该对发送方进行过滤,尽管我现在无法在我的测试帐户上对其进行过滤。这是我进行有效查询的方式,它只为您提供所需的信息:

from datetime import timedelta
from exchangelib import Credentials,Account,UTC_NOW

credentials = Credentials('something@something.dk','private')
a = Account('something@something.dk',credentials=credentials,autodiscover=True)
since = UTC_NOW() - timedelta(hours=24)
testfolder = a.inbox.parent / 'Test'
if not testfolder.filter(
    datetime_received__gt=since,sender='info@something.com',).exists():
    print('No email found!')

相关问答

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