Reply with simple (single) reminder
This commit is contained in:
parent
83de9b9231
commit
49a874f3a5
1 changed files with 39 additions and 14 deletions
53
remindme.py
53
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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue