From 49a874f3a5556cef3a9b6179059dc04e02e0f24b Mon Sep 17 00:00:00 2001 From: Maximilian Friedersdorff Date: Thu, 12 Dec 2019 21:34:35 +0000 Subject: [PATCH] Reply with simple (single) reminder --- remindme.py | 53 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/remindme.py b/remindme.py index e7d4122..7662544 100755 --- a/remindme.py +++ b/remindme.py @@ -1,7 +1,7 @@ #!/bin/env/python3 import os import email -from datetime import datetime +from datetime import datetime, timezone from imapclient import IMAPClient from smtplib import SMTP_SSL @@ -42,10 +42,8 @@ def list_reminders(person, client): def ack_message(uid, message, client): - print(message) msg = email.message_from_bytes(message[b"BODY[]"]) if msg.is_multipart(): - print("Deleting multipart message") return None, True client.delete_messages([uid]) @@ -69,13 +67,30 @@ def ack_message(uid, message, client): reply.set_content(f"{prefix}\n{reply.get_content()}") return reply, False + +def remind(uid, message, client): + msg = email.message_from_bytes(message[b"BODY[]"]) + + payload = msg.get_payload().strip() if payload.startswith("repeat"): try: - print(get_description(payload)) - it = croniter(payload, datetime.now()) - print(it.get_next(datetime)) + croniter(payload, datetime.now()) except Exception as e: - print("Invalid Cron: ", e) + print("An error occured", e) + return None, False + + remind_time = d_parse(payload.splitlines()[0]) + if not remind_time.tzinfo: + sender_timezone = d_parse(msg["Date"]).tzinfo + remind_time = remind_time.replace(tzinfo=sender_timezone) + + now = datetime.now(timezone.utc) + if now > remind_time: + reply = empty_reply(msg) + reply.replace_header("Subject", f"Reminder: {msg['Subject']}") + reply.set_content(f"This is a reminder:\n{msg['Subject']}") + return reply, True + else: return None, False @@ -84,26 +99,36 @@ def main(): user = os.environ["REMINDME_USERNAME"] passwd = os.environ["REMINDME_PASS"] with IMAPClient(host=mhost) as iclient, SMTP_SSL(mhost) as sclient: - print("Inside context manager") iclient.login(user, passwd) sclient.login(user, passwd) iclient.select_folder("INBOX") unseen_msgs = iclient.fetch(iclient.search(["UNSEEN"]), "BODY.PEEK[]") for uid, message in unseen_msgs.items(): - print(uid) reply, delete = ack_message(uid, message, iclient) - try: if reply: - print("Replying to message") - print("reply") sclient.send_message(reply) if delete: - print("Deleting message") + pass # iclient.delete_messages([uid]) else: - print("Setting msg as seen") + pass + # iclient.set_flags([uid], [r"\SEEN"]) + except Exception as e: + print("An error occured", e) + + all_msgs = iclient.fetch(iclient.search(["NOT", "DELETED"]), "BODY[]") + for uid, message in all_msgs.items(): + reply, delete = remind(uid, message, iclient) + try: + if reply: + sclient.send_message(reply) + if delete: + pass + # iclient.delete_messages([uid]) + else: + pass # iclient.set_flags([uid], [r"\SEEN"]) except Exception as e: print("An error occured", e)