Export receipts.vbs

From Alpine Linux
Revision as of 15:44, 21 March 2012 by Dubiousjim (talk | contribs) (Category:Mail)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
 '==================================================================================================
 ' NAME: PostfixAddressExtract.VBS
 ' VERSION: 1.0
 ' AUTHOR: Bharat Suneja (altered by Lee Monamy)
 ' LAST MODIFIED : 16/08/2007
 '==================================================================================================
 ' COMMENT: Based on LISTPROXYADDRESSES.VBS/LISTEMAILADDRESSES.VBS by Bharat Suneja
 '          http://exchangepedia.com/blog/2005/09/how-to-export-all-email-addresses-from.html
 '          but altered to:
 '          o  strip out cn, mail, etc entries
 '          o  strip out .local addresses
 '          o  remove a bunch of extra CRLFs
 '          o  remove the "SMTP:" or "smtp:" prefix from addresses (x = Right(x), Len(x) -5))
 '          o  put the display name commented out just before the email addresses
 '          o  append "   OK" after just the email address (sans SMTP: prefix)
 '          Run the script (double-click) and the output appears in a dialog.  It is also written
 '          to C:\proxyaddresses.txt.  You should be able to copy this file to your spam filter and
 '          simply postmap it with no further processing required.
 '          DISCLAIMER: THIS SCRIPT IS ENTIRELY UNSUPPORTED.  USE AT YOUR OWN RISK.  NOBODY BUT YOU
 '          IS RESPONSIBLE IF THIS SCRIPT DELETES THE CONTENTS OF YOUR ACTIVE DIRECTORY OR SETS FIRE
 '          TO YOUR CAT.  CAVEAT EMPTOR.
 '          LICENCE: Unknown, as this is pretty much Bharat Suneja's script with minor changes, and
 '          there was no licence mentioned originally.  Otherwise, LGPL.  Do what you like.
 '          This has been tested on several SBS 2003 installations and Works For Me, and does what I
 '          need.  I hope you find it useful.
 '          Thanks to Gary V (http://www200.pair.com/mecham/spam/) & freespamfilter.org for their
 '          truly excellent documentation!
 '==================================================================================================

 'Set up constant for deleting values from multivalued attribute memberOf

 Const ADS_PROPERTY_NOT_FOUND  = &h8000500D
 Const ADS_UF_ACCOUNTDISABLE = 2                       'For UserAccountControl
 Const strX400Search = "x400"
 Const LocSearch = ".local"
 '______________________________________________________

 'Set RootDSE
 Set objRootDSE = GetObject("LDAP://rootDSE")
 strDomain = objRootDSE.Get("defaultNamingContext")
 strADPath = "LDAP://" & strDomain
 'wscript.Echo strADPath
 Set objDomain = GetObject(strADPath)
 'wscript.echo "objDomain: " & objDomain.distinguishedName

 'Setup ADODB connection
 Set objConnection = CreateObject("ADODB.Connection")
 objConnection.Open "Provider=ADsDSOObject;"
 Set objCommand = CreateObject("ADODB.Command")
 objCommand.ActiveConnection = objConnection

 'Execute search command to look for Contacts & Groups
     objCommand.CommandText = _
       "<" & strADPath & ">" & ";(&(|(objectClass=contact)(objectClass=group))(mail=*))" & ";distinguishedName,displayName,mail,proxyAddresses;subtree"

     'Execute search to get Recordset
     Set objRecordSet = objCommand.Execute
     
         
         'Start procedure
         
     strResult = strResult & VbCrLf & "# Domain: " & strDomain

     strResult = strResult & VbCrlf &  "#Total Records Found (other accounts, distribution groups): " & objRecordSet.RecordCount & VbCrlf
     AddressCount = 0

        While Not objRecordSet.EOF 'Iterate through the search results
  
             strUserDN = objRecordSet.Fields("distinguishedName")     'Get User's distinguished name from Recordset into a string
             set objUser= GetObject("LDAP://"& strUserDN & "")         'Use string to bind to user object
             

                        arrProxyAddresses = objRecordSet.Fields("proxyAddresses")
                        If IsArray(objRecordSet.Fields("proxyAddresses")) Then               
                           For Each ProxyAddress in arrProxyAddresses
                             'Sub: Check X400 
                              If InStr(LCase(ProxyAddress), strX400Search) <> 0 Then 
                         		'Wscript.Echo "#This was an x400"
                     		 Else
                                      If InStr(1, ProxyAddress, LocSearch, 1) = 0 Then
                                          proxyAddress = Right(proxyAddress, Len(proxyAddress) -5 )
                                          strResult = strResult & VbCrlf & proxyAddress & "   OK"
                                      End If
                               End If   'Ends loop for X400 address
                 Next

             Else
                 strResult = strResult & VbCrlf &  "#Object does not have proxy addresses"
             End If
                 'strResult = strResult &  VbCrLf

      objRecordSet.MoveNext
 Wend

 '*************************************
 'Begin second query for users
 varDisabledCounter = 0                  

 'Execute search command to look for user
     objCommand.CommandText = _
       "<" & strADPath & ">" & ";(&(objectClass=user)(mail=*))" & ";distinguishedName,displayName,mail,proxyAddresses;subtree"

     'Execute search to get Recordset
     Set objRecordSet = objCommand.Execute
     
     strResult = strResult & vbCrlf & vbCrlf & "#Users"
     strResult = strResult & VbCrlf &  "#Total Records Found (users): " & objRecordSet.RecordCount
     


        While Not objRecordSet.EOF 'Iterate through the search results
             strUserDN = objRecordSet.Fields("distinguishedName")     'Get User's distinguished name from Recordset into a string
             set objUser= GetObject("LDAP://"& strUserDN & "")         'Use string to bind to user object
             
             
             If objUser.AccountDisabled = TRUE Then                    'If User account disabled, then skip proxy address enum
                varDisabledCounter = varDisabledCounter + 1
                strResult2 = strResult2 & VbCrLf & "# " & varDisabledCounter & " " & objUser.displayName & VbCrLf

                        arrProxyAddresses = objRecordSet.Fields("proxyAddresses")
                        If IsArray(objRecordSet.Fields("proxyAddresses")) Then

                           For Each ProxyAddress in arrProxyAddresses
                             'Sub: Check X400
                              If InStr(LCase(ProxyAddress), strX400Search) <> 0 Then 
                         		'Wscript.Echo "#This was an x400"
                     		 Else
                                          If InStr(1, ProxyAddress, LocSearch, 1) = 0 Then
                                              proxyAddress = Right(proxyAddress, Len(proxyAddress) -5 )
                         		     strResult2 = strResult2 & "# " &  proxyAddress & "   OK"
                                          End If
                                  AddressCount = AddressCount + 1
                               End If   'Ends loop for X400 address
                           Next
                               Else
                                   strResult2 = strResult2 & VbCrLf &  "#Object does not have proxy addresses"
                           End If
                               'strResult2 = strResult2 &  VbCrLf
                
    
             Else
                   strResult = strResult & VbCrLf & "# " & " " & objUser.displayName
                        arrProxyAddresses = objRecordSet.Fields("proxyAddresses")
                        If IsArray(objRecordSet.Fields("proxyAddresses")) Then
                           
                           For Each ProxyAddress in arrProxyAddresses
                             'Sub: Check X400
                              If InStr(LCase(ProxyAddress), strX400Search) <> 0 Then 
                         		'Wscript.Echo "#This was an x400"
                     		 Else
                                          If InStr(1, ProxyAddress, LocSearch, 1) = 0 Then
                                              proxyAddress = Right(proxyAddress, Len(proxyAddress) -5 )
                         		     strResult = strResult & vbCrlf & proxyAddress & "   OK"
                                          End If
                                  AddressCount = AddressCount + 1
                               End If   'Ends loop for X400 address
                           Next
                               Else
                                   strResult = strResult & VbCrLf &  "#Object does not have proxy addresses"
                           End If
                               strResult = strResult &  VbCrLf
                 
           End If   'End check for disabled user 
             
      objRecordSet.MoveNext 
 Wend  'End second query for users

               
 strResult = "# Users, Groups & Contacts" & VbCrLf & "#-------------------------" & VbCrLf & strResult
 strResult = strResult & VbCrLf & "# Disabled Users" & VbCrLf & "#-------------------------" & VbCrLf & strResult2
 'WScript.Echo strResult

 'Output to a text file
 Set objFileSystem = CreateObject("Scripting.FileSystemObject")
 Set objOutputFile = objFileSystem.CreateTextFile("C:\Inetpub\wwwroot\virtual.txt")
 objOutputFile.Write strResult