Welcome, guest | Sign In | My Account | Store | Cart
import poplib
import time
import subprocess
from email import parser
from datetime import datetime

#-------------------------------------
# Send an e-mail to a g-mail address that will shutdown the computer
#
# Acceptable format: SHUTDOWN YOURSELF {DATE}
# Acceptable DATE format: YEAR-MONTH-DAY
# Example: SHUTDOWN YOURSELF 2016-26-05
# 
# To avoid from unknown shutdown mails
# We will check later if the mail is coming from a specific address
# So that only one e-mail address can shutdown your computer
# And you will decide that e-mail address
#-------------------------------------

#check the mail is came from the correct address
# for example;
# assume you enter 'mymail@hotmail.com' to from_addr
# we will check it later if the mail is coming from 'mymail@hotmail.com'

from_addr = input ("From address: ")

while True:

    #connect gmail
    pop_conn = poplib.POP3_SSL('pop.gmail.com')
    
    #make sure we are connected to POP, get POP-WELCOME message
    
    print ("\n"+str(pop_conn.getwelcome())[6:50])
    
    pop_conn.user('my_mail_address@gmail.com') #e-mail address
    pop_conn.pass_('my_mail_password') #password

    #check how many mails we have
    mail_info = pop_conn.stat()
    print ("Number of new emails: %s (%s bytes)" % mail_info)

    nmails = mail_info[0]

    #search for SUBJECT-FROM-DATE elements in the mails
    for i in range(nmails):
        for email in pop_conn.retr(i+1):
            try:
                for mail in email:
                    if "Subject" in str(mail):
                        t = str(mail)
                    if "From" in str(mail):
                        fr = str(mail)
                    if "Date" in str(mail):
                        dt = str(mail)
            except:
                #there are integers in the mails, simply pass the errors
                pass

    #command checker
    command = "SHUTDOWN YOURSELF"

    #slice all SUBJECT from mail
    bolt = t[2:-1]

    
    try:
        #slice SUBJECT's elements in a list
        boltapply = bolt.split(" ")[1]+ " " + bolt.split(" ")[2] + " " + bolt.split(" ")[3]

        #slice 'boltapply' to check if they are same with COMMAND
        boltapply_subject = boltapply.split(" ")[0]+ " " + boltapply.split(" ")[1]
        
        #slice 'boltapply' - get date part
        boltapply_date = boltapply.split(" ")[-1]

        #find current time
        timee = datetime.now()
        
        #current day - order: YEAR-MONTH-DAY
        timee_edit = str(timee.year)+"-"+"{:0>2}".format(str(timee.month))+"-"+str(timee.day)
        
        #current time - order: HOUR-MINUTE
        timee_hour = str(timee.hour) + "." + str(timee.minute )
        
        #slice 'dt' from MAIL - 'dt' is the date part from the MAILS
        dt_Edit = dt.split(" ")[5].split(":")[0] + "." + dt.split(" ")[5].split(":")[1]
        

        #check where are the MAILS from
        #so we can be sure it's from the address that we input above
        from_read = fr.split(" ")[-1].split("<")[1].split(">")[0]
    
        #first, check if YEAR-MONTH-DAY order is the same as today's DATE
        if boltapply_date == timee_edit:
            #then check if the MAIL sent before 1 HOUR, command(SHUTDOWN YOURSELF) is same as SUBJECT and is the mail came from CORRECT ADDRESS('from_addr')
            if datetime.now().hour - int(dt.split(" ")[5].split(":")[0]) == 0 and datetime.now().minute - int(dt.split(" ")[5].split(":")[1]) <= 59 and command == boltapply_subject and from_read == from_addr:
                #if all requirements are met, call "subprocess 'shutdown.exe'" and shutdown the computer in N seconds (it's 26 seconds now)
                subprocess.call(["shutdown.exe","-f","-s","-t","26"])
                
    except:
        #if SUBJECT is in wrong order
        #if there is no SUBJECT
        #if there is SUBJECT but there is no DATE
        #pass it

        # for example;
        # a subject like 'SHUTDOWN YOURSELF 2016' will end up with a TypeError (see above we are slicing SUBJECT 'boltapply')
        
        pass

    #wait 40 seconds
    time.sleep(40)

History