42 lines
No EOL
1.5 KiB
Python
42 lines
No EOL
1.5 KiB
Python
from prometheus_client import Gauge
|
|
import os
|
|
import imaplib
|
|
|
|
unread_mails = Gauge('unread_mails', 'Number of unread mails', ['mailbox'])
|
|
|
|
MAIL_SERVER = os.getenv("MAIL_SERVER")
|
|
MAIL_USER = os.getenv("MAIL_USER")
|
|
MAIL_PASS = os.getenv("MAIL_PASS")
|
|
MAIL_PORT = int(os.getenv("MAIL_PORT", 993))
|
|
|
|
print("[mail] Mail server:", MAIL_SERVER)
|
|
print("[mail] Mail user:", MAIL_USER)
|
|
print("[mail] Mail port:", MAIL_PORT)
|
|
|
|
def update():
|
|
try:
|
|
# handle secure differently, detect with port
|
|
if MAIL_PORT == 993:
|
|
mail = imaplib.IMAP4_SSL(MAIL_SERVER, MAIL_PORT)
|
|
else:
|
|
mail = imaplib.IMAP4(MAIL_SERVER, MAIL_PORT)
|
|
mail.login(MAIL_USER, MAIL_PASS)
|
|
mail.select("inbox")
|
|
result, data = mail.search(None, 'UNSEEN')
|
|
if result == 'OK':
|
|
unread_count = len(data[0].split())
|
|
unread_mails.labels(mailbox="inbox").set(unread_count)
|
|
else:
|
|
print(f"[mail] Error searching inbox: {data}")
|
|
unread_mails.labels(mailbox="inbox").set(0)
|
|
mail.close()
|
|
mail.logout()
|
|
except imaplib.IMAP4.error as e:
|
|
print(f"[mail] IMAP error: {e}")
|
|
unread_mails.labels(mailbox="inbox").set(0)
|
|
except ConnectionRefusedError:
|
|
print("[mail] Connection refused. Check your IMAP server settings.")
|
|
unread_mails.labels(mailbox="inbox").set(0)
|
|
except Exception as e:
|
|
print(f"[mail] Error checking unread mails: {e}")
|
|
unread_mails.labels(mailbox="inbox").set(0) |