remindme/remindme.py

84 lines
2.5 KiB
Python
Raw Normal View History

2019-12-12 18:33:23 +00:00
#!/bin/env/python3
import os
import email
from datetime import datetime
from imapclient import IMAPClient
from smtplib import SMTP_SSL
from dateutil.parser import parse as d_parse
from cron_descriptor import get_description
from croniter import croniter
help_text = """
A very comprehensive help text
"""
def ack_message(uid, message, client):
msg = email.message_from_bytes(message[b"RFC822"])
if msg.is_multipart():
print("Deleting multipart message")
return None, True
client.delete_messages([uid])
payload = msg.get_payload().strip()
if payload.startswith("help"):
print("We should help")
reply = email.message.EmailMessage()
reply.set_content(help_text)
reply["Subject"] = f"Help for remindme service (was {msg['Subject']})"
reply["Message-ID"] = email.utils.make_msgid()
reply["In-Reply-To"] = msg["Message-ID"]
reply["References"] = msg["Message-ID"]
reply["To"] = msg["Reply-To"] or msg["From"]
reply["From"] = "remindme@friedersdorff.com"
return reply, True
if payload.startswith("repeat"):
try:
print(get_description(payload))
it = croniter(payload, datetime.now())
print(it.get_next(datetime))
except Exception as e:
print("Invalid Cron: ", e)
return None, False
date = d_parse(payload)
print(date)
return None, False
def main():
mhost = "mail.friedersdorff.com"
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"]), 'RFC822')
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")
#iclient.delete_messages([uid])
else:
print("Setting msg as seen")
#iclient.set_flags([uid], [r"\SEEN"])
except Exception as e:
print("An error occured", e)
if __name__ == "__main__":
main()