Jump to content

Help with sending an email when a program is detected as closed


Recommended Posts

Hello, I am trying to create an AutoIT program that detects a program closed out and then sends an email to a few people. I have the send email part down from JOV's post a few years ago. I just need the script to recognize that the software i have closes out and then sends the email. I will also need the script to sleep for 10-20 minutes then loop back to the start of the script. I'm still very new to AutoIT and im not sure if using while loops and ProcessExist will do the trick.

While 1
#include <MsgBoxConstants.au3>

If ProcessExists("notepad.exe") Then ContinueLoop
WEnd

ElseIf
#Include<file.au3>
;Send Email
; Variables
;##################################
$SmtpServer = "mail.smtpserver.example"                  ; address for the smtp-server to use - REQUIRED
$FromName = "Trips4 Report Queue"                    ; name from who the email was sent
$FromAddress = "exampleaddress.test.com"                 ; address from where the mail should come
$ToAddress = ""                   ; destination address of the email - REQUIRED
$Subject = "Trips 4 Test"                     ; subject from the email - can be anything you want it to be
$Body = "Trips 4 Queue is down"                        ; the messagebody from the mail - can be left blank but then you get a blank mail
$AttachFiles = ""                 ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
$CcAddress = ""                   ; address for cc - leave blank if not needed
$BccAddress = ""                  ; address for bcc - leave blank if not needed
$Importance = "High"            ; Send message priority: "High", "Normal", "Low"
$Username = "ReportQueue@emailaddress.com"                    ; username for the account used from where the mail gets sent - REQUIRED
$Password = ""                    ; password for the account used from where the mail gets sent - REQUIRED
$IPPort = 25                       ; port used for sending the mail
$ssl = 0                          ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465                    ; GMAIL port used for sending the mail
;~ $ssl=1                         ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS


;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & "  Description:" & $rc)
EndIf

; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    Local $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
        For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
;~          ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
            If FileExists($S_Files2Attach[$x]) Then
                ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
                $objEmail.AddAttachment($S_Files2Attach[$x])
            Else
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
                SetError(1)
                Return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    If Number($IPPort) = 0 then $IPPort = 25
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
        Case "High"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
        Case "Normal"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
        Case "Low"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
        SetError(2)
        Return $oMyRet[1]
    EndIf
    $objEmail=""
EndFunc   ;==>_INetSmtpMailCom


;; Com Error Handler
Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 😎
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description, 3)
    ConsoleWrite("### COM Error !  Number: " & $HexNumber & "   ScriptLine: " & $oMyError.scriptline & "   Description:" & $oMyRet[1] & @LF)
    SetError(1); something to check for when this function returns
    Return
EndFunc   ;==>MyErrFunc

Edited by ryguy96
Link to post
Share on other sites

Welcome!   When posting code on any forum, it's a good idea to see if there's a code option... on this forum, there's a button that looks like this   <>

Your code is a bit messed up... we commonly arrange it more like this...

; <-- You can save the Email code to a seperate file and "#include <EmailCom.au3>" it here or put the function at the bottom

; <-- Declare your variables here (with Global)
Global $smtpServer

; While True is more readable than 1
While True

    If Not ProcessExists("notepad.exe") Then
        
        ; Send your email
        _INetSmtpMailCom(<your params>)
        
        ; Sleep for your required time
        Sleep(10 * 60 * 1000)   ;(10 Minutes * 60 seconds * 1000 milliseconds)
        
    Else
        
        ; Let the computer rest a bit
        Sleep(100)
        
    EndIf
    
WEnd

; <-- Put your email function here if you are not #include-ing it

 

All my code provided is Public Domain... but it may not work. ;) Use it, change it, break it, whatever you want.

Spoiler

My Humble Contributions:
Personal Function Documentation - A personal HelpFile for your functions
Acro.au3 UDF - Automating Acrobat Pro
ToDo Finder - Find #ToDo: lines in your scripts

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...