Please note:
- The code uses the free Persits.MailSender object, which must be present on the machine running the script. It can be downloaded at www.aspemail.com (you don't have to install the full package, you can just manually extract the files from the installer and register AspEmail.dll with regsvr32.exe).
- Remember to replace "smtp.yourisp.com" and "alerts@yourdomain.com" with the correct hostname for your SMTP server and the correct email addresses.
- If just content update monitoring is needed (and any server downtime should be ignored), please use this script instead.
Option Explicit
Dim strSMTPServer
Dim strEmailFrom
Dim strEmailTo
strSMTPServer = "smtp.yourisp.com"
strEmailFrom = "alerts@yourdomain.com"
strEmailTo = "alerts@yourdomain.com"
'Syntax: CheckSite "CheckURL", "CutBefore", "CutAfter"
'
'CheckURL - is the URL you want to monitor for changes.
'CutBefore - is a string to search for. Any content data before this
' string is ignored. Leave empty if no ignoring is needed
'CutAfter - is a string to search for. Any content data after this
' string is ignored. Leave empty if no ignoring is needed
'
'Add multiple function calls to monitor different sites.
' ---- Insert sites you want to monitor in this section -------------
CheckSite "http://www.google.com/", "<title>", "</title>"
CheckSite "http://www.yourdomain.com/", "<div id=""main"">", "</div>"
' -------------------------------------------------------------------
If FileExist("alertList.txt") Then
Call SendMail(strEmailFrom, "Website monitor", strEmailTo, _
"Website monitor alert", Readfile("alertList.txt"))
Call DeleteFile("alertList.txt")
End If
Sub WriteFile(strFileName, strContent)
Const blnOverwr = True
Const blnAppend = False
Const blnUnicode = True
Const blnASCII = False
Dim objFS
Dim objFSFile
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFSFile = objFS.CreateTextFile(strFileName, blnOverwr, blnUnicode)
objFSFile.Write(strContent)
objFSFile.Close
Set objFSFile = nothing
Set objFS = nothing
End Sub
Sub AppendFile(strFileName, strContent)
Const intRead = 1
Const intWrite = 2
Const intAppend = 8
Const blnCreate = True
Const blnNoCreate = False
Const intASCII = 0
Const intUnicode = -1
Const intDefault = -2
Dim objFS
Dim objTS
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTS = objFS.OpenTextFile(strFileName, intAppend, blnCreate, intASCII)
objTS.writeLine(strContent)
objTS.close()
Set objTS = nothing
Set objFS = nothing
End Sub
Function ReadFile(strFileName)
Const intRead = 1
Const intWrite = 2
Const intAppend = 8
Const blnCreate = True
Const blnNoCreate = False
Const intASCII = 0
Const intUnicode = -1
Const intDefault = -2
Dim strContents
Dim objFS
Dim objTS
strContents = ""
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FileExists(strFilename) Then
Set objTS = _
objFS.OpenTextFile(strFileName, intRead, blnNoCreate, intDefault)
strContents = objTS.ReadAll
objTS.Close
Set objTS = nothing
End If
Set objFS = nothing
Readfile = strContents
End Function
Function FileExist(strFileName)
Dim objFS
Set objFS = CreateObject("Scripting.FileSystemObject")
if objFS.FileExists(strFileName) Then
FileExist = True
Else
FileExist = False
End if
Set objFS = nothing
End Function
Sub DeleteFile(strFileName)
Dim objFS
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FileExists(strFileName) Then
objFS.DeleteFile strFileName, true
End If
Set objFS = nothing
End Sub
Sub SendMail(strEmailFrom, strFromName, strEmailTo, strSubject, strMessage)
Dim objEmail
Set objEmail = CreateObject("Persits.MailSender")
objEmail.Host = strSMTPServer
objEmail.From = strEmailFrom
objEmail.FromName = strFromName
'objEmail.AddReplyTo(strEmailFrom)
objEmail.AddAddress(strEmailTo)
objEmail.isHTML = false
objEmail.Subject = strSubject
objEmail.Body = strMessage
'objEmail.AddAttachment("status.dat")
objEmail.Send()
Set objEmail = nothing
End Sub
Function GenerateFileName(strURL)
Dim objRegExpr
Dim strIntermediate
Set objRegExpr = New regexp
objRegExpr.Global = True
objRegExpr.Pattern = "[^0-9a-zA-Z]" ' Match anything not alphanumeric
strIntermediate = objRegExpr.Replace(strURL, "")
Set objRegExpr = Nothing
GenerateFileName = strIntermediate & ".txt"
End Function
Function ChopChop(strInput, strCutBefore, strCutAfter)
If strCutBefore <> "" Then
If InStr(strInput, strCutBefore) > 0 Then
strInput = Right(strInput, _
Len(strInput) - InStr(strInput, strCutBefore) + 1)
End If
End If
If strCutAfter <> "" Then
If InStr(strInput, strCutAfter) > 0 Then
strInput = Left(strInput, _
InStr(strInput, strCutAfter) + Len(strCutAfter) - 1)
'Use InStrRev instead to search from end to beginning
End If
End If
ChopChop = strInput
End Function
Sub CheckSite(strCheckURL, strCutBefore, strCutAfter)
Dim objWinHttp
Dim strContent
Dim strContentFile
strContentFile = GenerateFileName(strCheckURL)
Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
objWinHttp.SetTimeouts 29000, 29000, 29000, 29000
objWinHttp.Option(0) = "Website_monitor_light/1.0"
objWinHttp.Option(6) = True
objWinHttp.Open "GET", strCheckURL
On Error Resume Next
objWinHttp.Send()
If Err.number = 0 Then
If (objWinHttp.Status = 200) Then
strContent = objWinHttp.ResponseText
strContent = ChopChop(strContent, strCutBefore, strCutAfter)
If strContent <> Readfile(strContentFile) Then
Call AppendFile("alertList.txt", Now() & _
" Content change detected on the URL " & strCheckURL)
Call WriteFile(strContentFile, strContent)
End If
Else
strContent = "HTTP " & objWinHttp.Status & " " & _
objWinHttp.StatusText
If strContent <> Readfile(strContentFile) Then
Call AppendFile("alertList.txt", Now() & _
" The URL " & strCheckURL & " returned http status " & _
objWinHttp.Status & " " & objWinHttp.StatusText)
Call WriteFile(strContentFile, strContent)
End If
End If
Else
strContent = "Error " & Err.Number & " " & Err.Source & " " & _
Err.Description
If strContent <> Readfile(strContentFile) Then
Call AppendFile("alertList.txt", Now() & _
" Error connecting to " & strCheckURL & " " & Err.Description)
Call WriteFile(strContentFile, strContent)
End If
End If
On Error GoTo 0
Set objWinHttp = Nothing
End Sub
Dim strSMTPServer
Dim strEmailFrom
Dim strEmailTo
strSMTPServer = "smtp.yourisp.com"
strEmailFrom = "alerts@yourdomain.com"
strEmailTo = "alerts@yourdomain.com"
'Syntax: CheckSite "CheckURL", "CutBefore", "CutAfter"
'
'CheckURL - is the URL you want to monitor for changes.
'CutBefore - is a string to search for. Any content data before this
' string is ignored. Leave empty if no ignoring is needed
'CutAfter - is a string to search for. Any content data after this
' string is ignored. Leave empty if no ignoring is needed
'
'Add multiple function calls to monitor different sites.
' ---- Insert sites you want to monitor in this section -------------
CheckSite "http://www.google.com/", "<title>", "</title>"
CheckSite "http://www.yourdomain.com/", "<div id=""main"">", "</div>"
' -------------------------------------------------------------------
If FileExist("alertList.txt") Then
Call SendMail(strEmailFrom, "Website monitor", strEmailTo, _
"Website monitor alert", Readfile("alertList.txt"))
Call DeleteFile("alertList.txt")
End If
Sub WriteFile(strFileName, strContent)
Const blnOverwr = True
Const blnAppend = False
Const blnUnicode = True
Const blnASCII = False
Dim objFS
Dim objFSFile
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFSFile = objFS.CreateTextFile(strFileName, blnOverwr, blnUnicode)
objFSFile.Write(strContent)
objFSFile.Close
Set objFSFile = nothing
Set objFS = nothing
End Sub
Sub AppendFile(strFileName, strContent)
Const intRead = 1
Const intWrite = 2
Const intAppend = 8
Const blnCreate = True
Const blnNoCreate = False
Const intASCII = 0
Const intUnicode = -1
Const intDefault = -2
Dim objFS
Dim objTS
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTS = objFS.OpenTextFile(strFileName, intAppend, blnCreate, intASCII)
objTS.writeLine(strContent)
objTS.close()
Set objTS = nothing
Set objFS = nothing
End Sub
Function ReadFile(strFileName)
Const intRead = 1
Const intWrite = 2
Const intAppend = 8
Const blnCreate = True
Const blnNoCreate = False
Const intASCII = 0
Const intUnicode = -1
Const intDefault = -2
Dim strContents
Dim objFS
Dim objTS
strContents = ""
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FileExists(strFilename) Then
Set objTS = _
objFS.OpenTextFile(strFileName, intRead, blnNoCreate, intDefault)
strContents = objTS.ReadAll
objTS.Close
Set objTS = nothing
End If
Set objFS = nothing
Readfile = strContents
End Function
Function FileExist(strFileName)
Dim objFS
Set objFS = CreateObject("Scripting.FileSystemObject")
if objFS.FileExists(strFileName) Then
FileExist = True
Else
FileExist = False
End if
Set objFS = nothing
End Function
Sub DeleteFile(strFileName)
Dim objFS
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FileExists(strFileName) Then
objFS.DeleteFile strFileName, true
End If
Set objFS = nothing
End Sub
Sub SendMail(strEmailFrom, strFromName, strEmailTo, strSubject, strMessage)
Dim objEmail
Set objEmail = CreateObject("Persits.MailSender")
objEmail.Host = strSMTPServer
objEmail.From = strEmailFrom
objEmail.FromName = strFromName
'objEmail.AddReplyTo(strEmailFrom)
objEmail.AddAddress(strEmailTo)
objEmail.isHTML = false
objEmail.Subject = strSubject
objEmail.Body = strMessage
'objEmail.AddAttachment("status.dat")
objEmail.Send()
Set objEmail = nothing
End Sub
Function GenerateFileName(strURL)
Dim objRegExpr
Dim strIntermediate
Set objRegExpr = New regexp
objRegExpr.Global = True
objRegExpr.Pattern = "[^0-9a-zA-Z]" ' Match anything not alphanumeric
strIntermediate = objRegExpr.Replace(strURL, "")
Set objRegExpr = Nothing
GenerateFileName = strIntermediate & ".txt"
End Function
Function ChopChop(strInput, strCutBefore, strCutAfter)
If strCutBefore <> "" Then
If InStr(strInput, strCutBefore) > 0 Then
strInput = Right(strInput, _
Len(strInput) - InStr(strInput, strCutBefore) + 1)
End If
End If
If strCutAfter <> "" Then
If InStr(strInput, strCutAfter) > 0 Then
strInput = Left(strInput, _
InStr(strInput, strCutAfter) + Len(strCutAfter) - 1)
'Use InStrRev instead to search from end to beginning
End If
End If
ChopChop = strInput
End Function
Sub CheckSite(strCheckURL, strCutBefore, strCutAfter)
Dim objWinHttp
Dim strContent
Dim strContentFile
strContentFile = GenerateFileName(strCheckURL)
Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
objWinHttp.SetTimeouts 29000, 29000, 29000, 29000
objWinHttp.Option(0) = "Website_monitor_light/1.0"
objWinHttp.Option(6) = True
objWinHttp.Open "GET", strCheckURL
On Error Resume Next
objWinHttp.Send()
If Err.number = 0 Then
If (objWinHttp.Status = 200) Then
strContent = objWinHttp.ResponseText
strContent = ChopChop(strContent, strCutBefore, strCutAfter)
If strContent <> Readfile(strContentFile) Then
Call AppendFile("alertList.txt", Now() & _
" Content change detected on the URL " & strCheckURL)
Call WriteFile(strContentFile, strContent)
End If
Else
strContent = "HTTP " & objWinHttp.Status & " " & _
objWinHttp.StatusText
If strContent <> Readfile(strContentFile) Then
Call AppendFile("alertList.txt", Now() & _
" The URL " & strCheckURL & " returned http status " & _
objWinHttp.Status & " " & objWinHttp.StatusText)
Call WriteFile(strContentFile, strContent)
End If
End If
Else
strContent = "Error " & Err.Number & " " & Err.Source & " " & _
Err.Description
If strContent <> Readfile(strContentFile) Then
Call AppendFile("alertList.txt", Now() & _
" Error connecting to " & strCheckURL & " " & Err.Description)
Call WriteFile(strContentFile, strContent)
End If
End If
On Error GoTo 0
Set objWinHttp = Nothing
End Sub
No comments:
Post a Comment