This may be a stupid question but is there a way in _vbscript_ to easily verify that you have a fuctional connection to the Internet?  
 
I manage a listserve for nurses with close to 700 subscribers.  The list usually generates over 100 emails daily and a lots of error messages.  I set up a program alias to capture and process incoming error messages.  This script uses a sql server database to log and keep a running count of error messages for each bounced email address.   Once that address reaches a set threshold (25 in this case),  the script automatically unsubscribes the email address and creates a record showing when and why it was unsubscribed.
 
I launched this a few days ago and it seems to be working beautifully.  The thought just crossed my mind however that should my server lose Internet connectivity for an extended period,  this script may go into a loop that empties out the users.lst file.  That could be bad.
 
I'm thinking that I should add logic in the script to verify Internet connectivity.  If the verification fails, then terminate the script rather than kill the address.  I'll paste the code following this message if anyone would like to offer suggestions.  If there are some VB guru's out there I'd love to get some collaboration.
 
Thanks,
Gary
 
Gary Jorgenson, RN President - Robin Technologies, Inc.
670 Lakeview Plaza Blvd., Suite J | Worthington, OH 43085
Phone: 614.888.3001 | Fax: 614.888.3002 | Cell: 614.657.8080
[EMAIL PROTECTED] | www.robintek.com
 

Dim args, mo, x, re, re2, Matches, cErrorCreator, cListOwner, iErrorCount
iErrorCount = 1
Set args = WScript.Arguments
Set re = new regexp  'Create the RegExp object to extract 1st email address from message body
With re
 'find an email address
 .Pattern = "[EMAIL PROTECTED],4}\b"
 .IgnoreCase = True
 .Global = True
End With
Set re2 = new regexp  'Create a RegExp object to filter out safe messages to list admin
With re2
 'search for safe messages
 .Pattern = "subscribe"
 .IgnoreCase = True
 .Global = True
End With

'Load the email into a message object using Quiksoft Easymail object
Set mo = CreateObject("EasyMail.Message.6")
mo.LicenseKey="xxxxxxxxxxxxxx (xxxxxxxxxxxxxxxx)/xxxxxxxxxxxxxxxxxxxx"
x = mo.loadmessage( args.Item(0), 0, 1, 0)

If re2.Test( mo.subject ) = False Then

 Set Matches = re.Execute(  mo.bodytext )   ' Execute search.
 If Matches.count > 0 Then
    cErrorCreator = Matches.Item(0)
 End If

 'Create an ADO Connection
 Dim cn, rs, sql
 Set cn = CreateObject("ADODB.Connection")
 cn.Provider = "sqloledb"
 ProvStr = "Server=xxxxxx;Database=xxxxxxx;UID=xxxxx;pwd=xxxxxx;"
 cn.Open ProvStr
 Set rs = CreateObject("ADODB.RecordSet")
 sql= "SELECT * from error_messages where error_creator = '" & cErrorCreator & "'"
 rs.Open sql, cn, 3, 3
 If rs.eof = True Then
  rs.AddNew
  rs.fields("error_creator").value = cErrorCreator
 Else
  iErrorCount = (rs.fields("error_count").value + 1)
  rs.fields("error_count").value = iErrorCount
  rs.fields("updated_date").value = Now()
 End If

 rs.fields("message_from").value = mo.FromAddr
 rs.fields("message_to").value = mo.Recipients.item(1).Address
 rs.fields("message_subject").value = mo.subject
 rs.fields("message_body").value = mo.bodytext
 rs.fields("message_date").value = mo.date

 rs.Update
 cListOwner = rs.fields("message_to").value
 rs.close

 sql = "select * from listserves where list_owner_email = '" & cListOwner & "'"
 rs.Open sql, cn, 3, 3
 If rs.eof = False Then
  rs.fields("last_error").value = Now()
  If iErrorCount > rs.fields("error_threshold").value Then
   remove_subscriber  cErrorCreator
  End If
  rs.Update
 End If
 rs.Close

 Set rs = Nothing
 cn.close
 Set cn = Nothing

End If

Set mo = Nothing
Set re = Nothing
Set re2 = Nothing

Function remove_subscriber( cAddress )
 Dim rs, rs1, sql
 Set rs = CreateObject("ADODB.RecordSet")
 Set rs1 = CreateObject("ADODB.RecordSet")
 sql= "SELECT * from error_messages where error_creator = '" & cErrorCreator & "'"
 rs.Open sql, cn, 3, 3
 If rs.eof = False Then

  rs1.Open "select top 0 * from addresses_dropped", cn, 3, 3
  rs1.AddNew
  rs1.fields("list_owner").value = rs.fields("message_to").value
  rs1.fields("error_subject").value = rs.fields("message_subject").value
  rs1.fields("error_email").value = rs.fields("error_creator").value
  rs1.fields("error_count").value = rs.fields("error_count").value
  rs1.fields("creation_date").value = rs.fields("creation_date").value
  rs1.fields("updated_date").value = rs.fields("updated_date").value
  rs1.fields("dropped_date").value = Now
  rs1.Update
  rs1.Close

  rs1.Open "SELECT * from listserves where list_owner_email = '" & rs.fields("message_to").value & "'"
  Dim cFilePath, Item
  cFilePath = rs1.fields("list_file_path").value
  rs1.close

  Dim objFSO, objFTemp, objFTemp2, objTextStream
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objTextStream = objFSO.OpenTextFile(cFilePath & "users.lst", 1)
  Set objFTemp = objFSO.CreateTextFile( cFilePath & "new_users.lst", True)
  Set objFTemp2 = objFSO.CreateTextFile( cFilePath & "users.txt", True)

  Do While objTextStream.AtEndOfStream = False
   Item = Trim(Replace(Replace(objTextStream.ReadLine,"<",""),">",""))
   If Not LCase(Item) = cAddress Then
    objFTemp.WriteLine( Item )
    objFTemp2.WriteLine( "<" & Item & "> " & Item )
   End If
  Loop

  objTextStream.Close
  objFtemp.Close
  objFtemp2.Close
  objFSO.CopyFile (cFilePath & "users.lst"), (cFilePath & "users.lst_bak"), True
  objFSO.CopyFile (cFilePath & "new_users.lst"), (cFilePath & "users.lst"), True
  objFSO.DeleteFile (cFilePath & "new_users.lst"), True
  Set objTextStream = Nothing
  Set objFTemp = Nothing
  Set objFTemp2 = Nothing
  Set objFSO = Nothing
  rs.delete
 End If

 rs.close
 Set rs = Nothing
 Set rs1 = Nothing

End Function

Reply via email to