added mail reminder script

This commit is contained in:
Stefan Kögl 2013-12-15 18:33:56 +01:00
parent 6b7476a05e
commit 2f8c765610
3 changed files with 84 additions and 0 deletions

View File

@ -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

3
reminder/mail_reminder.sh Executable file
View File

@ -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

73
reminder/reminder.py Executable file
View File

@ -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 <discuss@lists.chaostreff-dortmund.de>", 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)