Acknowledge receipt of help messages
This commit is contained in:
commit
a2969be439
1 changed files with 83 additions and 0 deletions
83
remindme.py
Executable file
83
remindme.py
Executable file
|
|
@ -0,0 +1,83 @@
|
|||
#!/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()
|
||||
Loading…
Add table
Reference in a new issue