#To define a particular parameter, replace the 'parameterName' inside itsm.getParameter('parameterName') with that parameter's name

emailto=itsm.getParameter('EmailTo')  ## Provide an To email address where the mail need to be sent.
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=itsm.getParameter('smptserver') #Default 'smtp.gmail.com'
port=itsm.getParameter('portnumber') #Default port number 587


import os,sys,shutil,re,sys,socket,_winreg,random,getpass
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
import ctypes
from subprocess import PIPE, Popen

def computername():
    return os.environ['COMPUTERNAME']

def ipaddress():
    return socket.gethostbyname(socket.gethostname())

subject='%s %s INV Report!!!!!'%(computername(), ipaddress())

message_body="The report has been attached."

def emailreport(subject, emailto,emailfrom,password,smtpserver,port,msgbody,fileToSend):
	os.chdir(os.environ['TEMP'])
	fileToSend=fileToSend.split('\\')[-1]
	msg = MIMEMultipart()
	msg["From"] = emailfrom
	msg["To"] = ",".join(emailto)
	msg["Subject"] = subject
	msg.preamble = subject
	body = MIMEText(msgbody)
	msg.attach(body)    
	
	attachment=open(fileToSend,"rb")
	p = MIMEBase('application', 'octet-stream') 
	p.set_payload((attachment).read())
	encoders.encode_base64(p)
	p.add_header('Content-Disposition', 'attachment', filename='report.csv')
	msg.attach(p) 
    

	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 "+emailto
	except Exception as e:
		return e


ls_col=['Computer Name','Model','Pc/Laptop','CPU','S.Number','RAM','Disk','OS','Installed Office Program Version']

def invlist():
    import subprocess as sp

    
    ls_row=[]

    #Host name 
    HostName=((sp.Popen('hostname',stdout=sp.PIPE)).communicate()[0]).strip()
    ls_row.append(HostName)
    
    #Model Name
    #computer mother board name
    computername=sp.Popen('WMIC CSPRODUCT GET NAME',stdout=sp.PIPE)
    brand=computername.communicate()[0].strip().splitlines()[-1]
    ls_row.append(brand)
    
    sys_info=sp.Popen('systeminfo',stdout=sp.PIPE)
    sys_info=sys_info.communicate()[0].splitlines()
    
    #pc/Laptop
    pc_laptop=sys_info[14].split()[-1]
    ls_row.append(pc_laptop)
    
    #CPU Usage
    cpu_usage=sp.Popen('wmic cpu get loadpercentage',stdout=sp.PIPE)
    cpu_usage=cpu_usage.communicate()[0].split()[1]+"%"
    ls_row.append(cpu_usage)
    
    #Serial Number 
    s_no=sp.Popen('wmic bios get SerialNumber',stdout=sp.PIPE)
    s_no=(s_no.communicate()[0]).replace('SerialNumber','').strip()
    ls_row.append(s_no)
    
    #Ram Usage
    
    ram_total=sp.Popen('systeminfo | findstr /C:"Total Physical Memory"',stdin=sp.PIPE,shell=True,stdout=sp.PIPE)
    ram_total=ram_total.communicate()[0]

    if len(ram_total.split()[3]) <=3 :
        ram_total=int(ram_total.split()[3])
    else:
        ram_total=int(ram_total.split()[3].replace('.',''))
    ram_avail=sp.Popen('systeminfo | findstr /C:"Available Physical Memory"',stdin=sp.PIPE,shell=True,stdout=sp.PIPE)
    ram_avail=ram_avail.communicate()[0]
    if len(ram_avail.split()[3]) <=3 :
        ram_avail=int(ram_avail.split()[3])
    else:
        ram_avail=int(ram_avail.split()[3].replace('.',''))
    ram_usage=str(int(ram_total)-int(ram_avail))+' MB Used'
    ls_row.append(ram_usage)
    
    #Disk Usage
    harddisk=sp.Popen('wmic logicaldisk get size,freespace',stdout=sp.PIPE)
    harddisk=harddisk.communicate()[0].split()
    harddisk_size,harddisk_free=int(harddisk[-1]),int(harddisk[-2])
    harddishused=harddisk_size-harddisk_free
    harddisk_used=convert_bytes(harddishused)
    ls_row.append(harddisk_used)
    
    #os Info
    os_info=sys_info[2:4]
    os_info_name=(os_info[0].replace('OS Name:                   ',''))
    os_info_ver=(os_info[1].replace('OS Version:                ',''))
    os_info_name_ver=os_info_name+'-'+os_info_ver
    ls_row.append(os_info_name_ver)
    
    #ofc ver
    ofc_ver=sp.Popen('powershell reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"',stdout=sp.PIPE)
    
    try :
        o_ver=ofc_ver.communicate()[0].splitlines()[-2].split()[-1]
        ls_row.append(o_ver)
    except:
        ls_row.append('Not Installed')
    return ls_row

def convert_bytes(size):
    for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
        if size < 1024.0:
            return "%3.1f %s" % (size, x)
        size /= 1024.0

    return size

ls_row=invlist()

import csv
import io
import os
fileToSend=os.path.join(os.environ['TEMP'], 'report.csv')

with open(fileToSend, 'wb' ) as file:
    writer = csv.writer(file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(ls_col)
    writer.writerow(ls_row)


emailreport(subject, emailto,emailfrom,password,smtpserver,port,message_body,fileToSend)
