12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- # /// 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()
|