Files
dotfiles/bin/.bin/mail-ntfy.py

74 lines
2.1 KiB
Python
Executable File

# /// script
# dependencies = [
# "requests",
# ]
# ///
import requests
import os
import imaplib
import email
from email.header import decode_header
user = os.environ.get("MAIL_USER")
password = os.environ.get("MAIL_PASS")
N = 15
def send_ntfy():
print("Checking for new email ... ")
if not password:
print("Please set your password in the MAIL_PASS environment variable")
return
if not user:
print("Please set your user in the MAIL_USER environment variable")
return
conn = imaplib.IMAP4_SSL("box.unbl.ink")
conn.login(user, password)
status, messages = conn.select("INBOX")
status, unread = conn.search(None, "UnSeen")
try:
unread = unread[0].decode()
except IndexError:
print("No new messages found")
unread_list = unread.split(" ")
if unread_list == ['']:
print("No new messages found")
return
print(f"Found {len(unread_list)} unread emails")
if unread_list:
for msg_num in unread_list:
# fetch the email message by ID
res, msg = conn.fetch(msg_num, "(RFC822)")
for response in msg:
if isinstance(response, tuple):
msg = email.message_from_bytes(response[1])
subject, encoding = decode_header(msg["Subject"])[0]
if isinstance(subject, bytes):
subject = subject.decode(encoding)
From, encoding = decode_header(msg.get("From"))[0]
if isinstance(From, bytes):
From = From.decode(encoding)
print(f"Found {subject}")
requests.post(
"https://ntfy.unbl.ink/207-comms",
data=subject.encode("utf-8"),
headers={
"Title": From,
"Tags": "envelope",
"Click": "https://box.unbl.ink/mail/?_task=mail&_mbox=INBOX"
}
)
conn.close()
conn.logout()
if __name__ == "__main__":
send_ntfy()