Files
monitor/monitorEmails.py
2025-03-24 21:33:34 +00:00

66 lines
2.2 KiB
Python
Executable File

#!/usr/bin/python3
import imaplib
import email
import datetime
import os
from pathlib import Path
## constants
UNREADDAYS = 3
FILE_SMS = '/tmp/emailcheck.sms'
FILE_WARNING = '/tmp/emailcheck.warning'
FILE_ESCALATE = '/tmp/emailcheck.ESCALATE'
def write_file(path, text):
file1 = open(path, "w")
file1.write(text)
file1.close()
# calculate date 3 days ago
threedaysago = datetime.datetime.now() - datetime.timedelta(days = UNREADDAYS)
threedaysago_str = threedaysago.strftime('(SINCE "%d-%b-%Y")')
# print(threedaysago_str)
# Connect to inbox
imap_server = imaplib.IMAP4_SSL(host='imap.strato.com')
imap_server.login('ignace@suy.nl', 'Ghdjh&653gh*')
imap_server.select() # Default is `INBOX`
#Search for all UIDs first
result1, data1 = imap_server.uid('search', threedaysago_str)
mails_total = len(data1[0].split())
result2, data2 = imap_server.uid('search', threedaysago_str, 'UNSEEN')
mails_unseen = len(data2[0].split())
print("{} mails {}, {}=={}".format(datetime.datetime.now(), threedaysago_str, mails_total, mails_unseen))
# print("{} {}".format(mails_total, mails_unseen))
if (mails_total > mails_unseen) or (mails_total == 0):
# some mail has been read in the past days, all is well
# delete sms file, warning file
if os.path.exists(FILE_SMS):
os.remove(FILE_SMS)
if os.path.exists(FILE_WARNING):
os.remove(FILE_WARNING)
if os.path.exists(FILE_ESCALATE):
os.remove(FILE_ESCALATE)
print(" ->Ok")
else:
# no mails have been read in the past days
# check if a earlier warning file has been created
if os.path.exists(FILE_WARNING):
if (not os.path.exists(FILE_ESCALATE)):
# serious shit, escalate
write_file(FILE_ESCALATE, "Escalation has taken place")
write_file(FILE_SMS, "SUY-CLOUD: You have received a mail from cloudserver@suy.nl - please check!.")
print(" ->Escalate")
else:
# create a warning file
write_file(FILE_WARNING, "In another half day, if no email is read, escalation will take place")
write_file(FILE_SMS, "SUY-CLOUD: You have not read mail for 3 days, do this immediately pls or escalate.")
print(" ->Warning")