Reply with simple (single) reminder

This commit is contained in:
Maximilian Friedersdorff 2019-12-12 21:34:35 +00:00
parent 83de9b9231
commit 49a874f3a5

View file

@ -1,7 +1,7 @@
#!/bin/env/python3 #!/bin/env/python3
import os import os
import email import email
from datetime import datetime from datetime import datetime, timezone
from imapclient import IMAPClient from imapclient import IMAPClient
from smtplib import SMTP_SSL from smtplib import SMTP_SSL
@ -42,10 +42,8 @@ def list_reminders(person, client):
def ack_message(uid, message, client): def ack_message(uid, message, client):
print(message)
msg = email.message_from_bytes(message[b"BODY[]"]) msg = email.message_from_bytes(message[b"BODY[]"])
if msg.is_multipart(): if msg.is_multipart():
print("Deleting multipart message")
return None, True return None, True
client.delete_messages([uid]) client.delete_messages([uid])
@ -69,13 +67,30 @@ def ack_message(uid, message, client):
reply.set_content(f"{prefix}\n{reply.get_content()}") reply.set_content(f"{prefix}\n{reply.get_content()}")
return reply, False 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"): if payload.startswith("repeat"):
try: try:
print(get_description(payload)) croniter(payload, datetime.now())
it = croniter(payload, datetime.now())
print(it.get_next(datetime))
except Exception as e: 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 return None, False
@ -84,26 +99,36 @@ def main():
user = os.environ["REMINDME_USERNAME"] user = os.environ["REMINDME_USERNAME"]
passwd = os.environ["REMINDME_PASS"] passwd = os.environ["REMINDME_PASS"]
with IMAPClient(host=mhost) as iclient, SMTP_SSL(mhost) as sclient: with IMAPClient(host=mhost) as iclient, SMTP_SSL(mhost) as sclient:
print("Inside context manager")
iclient.login(user, passwd) iclient.login(user, passwd)
sclient.login(user, passwd) sclient.login(user, passwd)
iclient.select_folder("INBOX") iclient.select_folder("INBOX")
unseen_msgs = iclient.fetch(iclient.search(["UNSEEN"]), "BODY.PEEK[]") unseen_msgs = iclient.fetch(iclient.search(["UNSEEN"]), "BODY.PEEK[]")
for uid, message in unseen_msgs.items(): for uid, message in unseen_msgs.items():
print(uid)
reply, delete = ack_message(uid, message, iclient) reply, delete = ack_message(uid, message, iclient)
try: try:
if reply: if reply:
print("Replying to message")
print("reply")
sclient.send_message(reply) sclient.send_message(reply)
if delete: if delete:
print("Deleting message") pass
# iclient.delete_messages([uid]) # iclient.delete_messages([uid])
else: 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"]) # iclient.set_flags([uid], [r"\SEEN"])
except Exception as e: except Exception as e:
print("An error occured", e) print("An error occured", e)