Welcome, guest | Sign In | My Account | Store | Cart
"""If you need to do something irregularly, randomly during the weekday, you often forget. This script send you email and open a windows randomly in random interval to remind you of doing it. It runs forever.

If you want to send email, uncomment the row sendMessage() and  fill variable me, to, smtp, name, login in sendMessage() def.
"""
# -*- coding: utf-8 -*-
import time, random, sys, os

if sys.version < '3':
    from Tkinter import *
else:
    from tkinter import *

# ----------------- variables ----------------------------------
mytimefrom=6        # from 6 pm
mytimeto=22         # to 22  am
mydelayfrom=1*3600    # random delay in secs from
mydelayto=5*3600      # random delay in secs to
randommailnext="randommailnext.txt"     # place to save time of next message

# ----------------- defs ----------------------------------

def showMessage():
    # show reminder message
    root=Tk()
    x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2
    y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2
    root.geometry("+%d+%d" % (x, y))
    root.protocol('WM_TAKE_FOCUS', root.update )
    root.wait_visibility(root)
    root.attributes('-topmost',1)
    label=Label(root, text="Do what you should do.").pack({"side": "left"})
    button=Button(text="OK", width="10", command=lambda:root.destroy()).pack()
    root.mainloop()

def sendMessage():
    # If you want to send email, uncomment the row sendMessage() and  fill variable me, to, smtp, name, login in sendMessage() def.
    import smtplib, time
    s = smtplib.SMTP(smtp)
    s.login(name, password)

    subject="Reminder"
    fromaddr=me
    toaddrs=[to]
    msg = ("Subject: %s\r\nFrom: %s\r\nTo: %s\r\n\r\n"
           % (subject, fromaddr, ", ".join(toaddrs)))
    text= "Do what you should do.\n%s" % time.ctime()
    msg = msg + text
    s.sendmail(fromaddr, toaddrs, msg)
    s.quit()

def checktime(nowtime):
    # do not remind at night
    if nowtime.tm_hour<=mytimefrom and nowtime.tm_hour>=mytimeto:
        return False
    return True

def timenextwritef():
    # save next time in file
    f=open(randommailnext,"a")
    timenext=time.mktime (nowtime)+delaysec
    f.write(time.ctime(timenext)+"\n")
    f.close()
    os.utime(randommailnext, None)

# ----------------- main app ----------------------------------

nowtime=time.localtime()
os.chdir(os.path.dirname(sys.argv[0]))  # to have "randommailnext" in the same dir

while True:
    delaysec=random.randint(mydelayfrom,mydelayto)
    timenextwritef()
    time.sleep(delaysec)
    nowtime=time.localtime()
    if checktime(nowtime):
#         sendMessage()    # uncomment if you want sending mails
        showMessage()

History