diff --git a/reminder/cleaning_reminder.txt b/reminder/cleaning_reminder.txt new file mode 100644 index 0000000..4ea6066 --- /dev/null +++ b/reminder/cleaning_reminder.txt @@ -0,0 +1,8 @@ +Hallo liebe Chaoten, + +am Samstag, den %(date)s haben wir wieder unseren Aufräumtag. + +Wir treffen uns wie immer um 11:00 Uhr. Das ist schon in %(diff)d Tagen... *g* + +das ctdo reminder script in volltestung + diff --git a/reminder/mail_reminder.sh b/reminder/mail_reminder.sh new file mode 100755 index 0000000..2cc860b --- /dev/null +++ b/reminder/mail_reminder.sh @@ -0,0 +1,3 @@ +#/bin/sh + +exec /home/hotte/mail_reminder/reminder.py -d 5 -r 1 -r 2 -r 3 -r 7 -r12 -m /home/hotte/mail_reminder/cleaning_reminder.txt -H mail2.ctdo.de diff --git a/reminder/reminder.py b/reminder/reminder.py new file mode 100755 index 0000000..7b68ab3 --- /dev/null +++ b/reminder/reminder.py @@ -0,0 +1,73 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- + +import argparse +import calendar +import smtplib +import sys + +from datetime import datetime +from email.mime.text import MIMEText +from email.header import Header +from email import charset + + +def createMail(args, target_date, diff): + fp = open(args.msg_template, 'r') + # Create a text/plain message + msg = MIMEText(fp.read() % {"date": target_date.strftime("%d.%m.%Y"), "diff":diff.days}, _charset="UTF-8") + fp.close() + + msg['Subject'] = Header(args.subject, "utf-8") + msg['From'] = args.From + msg['To'] = args.to + return msg + + +def getNextCleaningDate(cal, args): + for week in reversed(cal): + if week[args.day] != 0: + return week[args.day] + + +def main(args): + today = datetime.today() + cal = calendar.monthcalendar(today.year, today.month) + + target_day = getNextCleaningDate(cal, args) + target_date = datetime(today.year, today.month, target_day) + diff = target_date - today + + print("target_day", target_day) + print("target_date", target_date) + print("diff", diff) + + if diff.days in args.reminder_days: + charset.add_charset('utf-8', charset.QP, charset.QP) + msg = createMail(args, target_date, diff) + print(type(msg.as_string())) + print("msg", msg.as_string()) + + s = smtplib.SMTP(args.host) + s.set_debuglevel(3) + s.sendmail(args.From, [args.to], msg.as_string()) + s.quit() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="The ctdo configurable mail reminder script. " \ + "Works on the last given day in month. Sends a mail with given " \ + "'msg_template' if today is a day in the list of 'reminder_days'") + + parser.add_argument('-d', "--day", type=int, choices=range(7), required=True, help="which last day in month? monday=0, tuesday=1, ...") + parser.add_argument('-r', "--reminder_days", type=int, action="append", choices=range(0, 31), required=True, help="on which day to remind the crowd? 1 will be one day before, 7 a week before. May be specified multiple times.") + parser.add_argument('-m', "--msg_template", required=True, help="The path to a a file with predefined email text to send. You can use %%(date)s and %%(diff) variables in the text.") + parser.add_argument('-s', "--subject", default="Das bissken Haushalt aka Aufräumtag im CTDO", help="mail subject") + parser.add_argument('-f', "--From", default="CTDOReminder ", help="mail from") + parser.add_argument('-t', "--to", default="discuss@lists.chaostreff-dortmund.de", help="mail to") + parser.add_argument('-H', "--host", default="", help="the smtp server to send to") + + args = parser.parse_args(sys.argv[1:]) + + main(args) +