#To define a particular parameter, replace the 'parameterName' inside itsm.getParameter('parameterName') with that parameter's name
emailto=itsm.getParameter('EmailTo')  ## Provide an Toemail address where the mail need to be sent.You can also provide any number of To eamil address For example: ['varun@yopmail.com', xxxx@yopmail.com]
emailfrom=itsm.getParameter('EmailFrom')  ## Provide the From Email address from which the mail to be send
password=itsm.getParameter('Password')               ##Provide password for from email
smtpserver='smtp.gmail.com'
port=587

import os,sys,shutil,re,sys,socket,_winreg,random,getpass
from datetime import date, datetime
import socket
import smtplib
import mimetypes
from email.mime.multipart import MIMEMultipart
from email import encoders
from email.message import Message
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.text import MIMEText

a=[]
b=[]
c=[]
d=[]

From_date = date.today()

def collectprograms(rtkey,pK,kA):
    import _winreg
    import os
    try:    
        list=[]
        oK=_winreg.OpenKey(rtkey,pK,0,kA)
        i=0
        while True:
            try:
                bkey=_winreg.EnumKey(oK,i)
                vkey=os.path.join(pK,bkey)
                oK1=_winreg.OpenKey(rtkey,vkey,0,kA)
                try:
                    DN,bla=_winreg.QueryValueEx(oK1,'DisplayName')
                    DV,bla=_winreg.QueryValueEx(oK1,'DisplayVersion')
                    DK,bla=_winreg.QueryValueEx(oK1,'InstallDate')
                    inlist=[DN.strip(), DV.strip(), DK.strip()]
                    if inlist[1]=="None":
                        gh=0
                    else:
                        ki="\n"+inlist[0]+" "+inlist[1]+" : "+inlist[2]+"\n"
                        b.append(ki)
                        global str2
                        str2 = ''.join(str(e) for e in b)
                    
                except:
                    pass
                i+=1
            except:
                break
        _winreg.CloseKey(oK)
    except:
        pass

def programsinstalled():
    uninstallkey='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall'
    if 'PROGRAMFILES(X86)' in os.environ.keys():
        rklist=[(_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_WOW64_32KEY | _winreg.KEY_READ),
                (_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_WOW64_64KEY | _winreg.KEY_READ),
                (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_WOW64_32KEY | _winreg.KEY_READ),
                (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_WOW64_64KEY | _winreg.KEY_READ)]
    else:
        rklist=[(_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_READ),
                (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_READ)]
    collected=''
    uninstalled=''
    error=''
    blacklisted=''
    hasnoss=[]
    ic=0
    uc=0
    ec=0
    for i in rklist:
        col=collectprograms(i[0], i[1], i[2])

def computername():
    return os.environ['COMPUTERNAME']

def ipaddress():
    return socket.gethostbyname(socket.gethostname())

subject='%s %s Alert : Device Uptime is More than 48 Hours!!!!!'%(computername(), ipaddress())		

def emailreport(subject, emailto,emailfrom,password,smtpserver,port,msgbody):
    msg = MIMEMultipart()
    msg["From"] = emailfrom
    msg["To"] = ",".join(emailto)
    msg["Subject"] = subject
    msg.preamble = subject
    body = MIMEText(msgbody)
    msg.attach(body)       
    try:
        server = smtplib.SMTP(smtpserver,port)
        server.ehlo()
        server.starttls()
        server.login(emailfrom, password)
        server.sendmail(emailfrom, emailto, msg.as_string())
        server.quit()
        return " \nThe email report has been sent to "+msg["To"]
    except Exception as e:
        return e

def check1(From_date):
    From_date=str(From_date).replace("-","")
    start=int(From_date)
    for i in sr:
        i=int(i)
        if start == i:
            d.append(i)
    return d

def compare():
    for i in sort:
        i=str(i)
        get=re.findall('(.*): '+i,str2)
    return get
            
    
programsinstalled()

if not str2:
    print "No Installed Softwares on this Endpoint"
else:
    sr=re.findall(':(.*)',str2)

    sort=check1(From_date)

    if not sort:
        print "No Softwares has been installed between the entered Dates"
    else:
        jet=compare()
        if not jet :
            print "Couldn't filter the softwares"
        else:
            msgbody = ''
            msgbody += 'Intalled softwares :\n'
            for i in jet:
                msgbody += i
            print emailreport(subject,emailto,emailfrom,password,smtpserver,port,msgbody)
