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
|
#!/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)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue