Avatar billede nik- Nybegynder
22. september 2004 - 13:54 Der er 1 kommentar og
1 løsning

Automatisk svar i forbindelse med epost domæne migræring

Jeg har en Exchange 2003 server kørende, hvor epost domænenavnet skal ændres fra  abc.dk til  xyz.dk. Net nye DNS navn er registreret og postkasser er konfigureret med både  bruger@abc.dk og bruger@xyz.dk.  Post modtages nu med begge domænenavne og post sendes med det nye.
NU vil jeg gerne have Exchange til at returnere en standard mail til alle der skriver til bruger@abc.dk (gamle domæne) - men ikke hvis de skriver til bruger@xyz.dk (det nye) - men eposten skal *stadig leveres* til brugerens mailbox.
Avatar billede Slettet bruger
22. september 2004 - 21:35 #1
Det kan gøres med et EventSink!

På din Exchange server skal du oprette denne folder: "c:\eventsink"

Kopier nedenstående tekst (mellem de stiblede linier), og gem den som: c:\eventsink\NewDomain.vbs
Erstat xyz.dk med det nye domænenavn
Erstat 192.168.x.x med IP-adressen på din SMTP server (Exchange server)

'------------------------------------------------------------
<SCRIPT LANGUAGE="VBScript">

Sub ISMTPOnArrival_OnArrival(ByVal Msg, EventStatus)

  strNewDomain = "xyz.dk"
  strSmtpServer = "192.168.x.x"

  strTempName = Split(Msg.To, "@", -1, 1)

  strName = Replace(strTempName(LBound(strTempName)),"""","")
  strNewEMail = strName & "@" & strNewDomain

  strSubject = "Ny e-mailadresse"
  strEmailBody = "Vi har skiftet domænenavn." & vbLf & _
                "Min nye e-mailadresse er: " & strNewEMail & vbLf & vbLf & _
                "Venlig hilsen" & vbLf & strName


  Set iMsg = CreateObject("CDO.Message")
  Set iConf = CreateObject("CDO.Configuration")
  Set iFlds = iConf.Fields

  With iFlds
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 2
    .Item("http://schemas.microsoft.com/cdo/configuration/smtperver") = strSmtpServer
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
    .Item("http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion") = True
    .Update
  End With

  With iMsg
    Set .Configuration = iConf
    .To = Msg.From
    .From = strName & "<" & strNewEMail & ">"
    .Subject = strSubject
    .TextBody = strEmailBody
    .Send
  End With

  Set iFlds = Nothing
  Set iConf = Nothing
  Set iMsg = Nothing

End Sub

</SCRIPT>
'------------------------------------------------------------



Kopier nedenstående tekst (mellem de stiblede linier), og gem den som: c:\eventsink\Install.cmd
Erstat abc.dk med det gamle domænenavn.

rem ---------------------------------------------------------
cscript smtpreg.vbs /add    1 onarrival New_Domain CDO.SS_SMTPOnArrivalSink "RCPT TO=*@abc.dk"
cscript smtpreg.vbs /setprop 1 onarrival New_Domain Sink ScriptName "c:\eventsink\NewDomain.vbs"
pause
rem ---------------------------------------------------------



Kopier nedenstående tekst (mellem de stiblede linier), og gem den som: c:\eventsink\UnInstall.cmd

rem ---------------------------------------------------------
cscript smtpreg.vbs /remove  1 onarrival New_Domain
pause
rem ---------------------------------------------------------



Kopier nedenstående tekst (mellem de stiblede linier), og gem den som: c:\eventsink\smtpreg.vbs

'------------------------------------------------------------
'THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT
'WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
'INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES
'OF MERCHANTABILITY AND/OR FITNESS FOR A  PARTICULAR
'PURPOSE

'******************************************************************************
'FILE DESCRIPTION: Script for managing SMTP Protocol and Transport Event Sink bindings.
'
'File Name: smtpreg.vbs
'
'
' Copyright (c) Microsoft Corporation 1993-1999. All rights reserved.
'******************************************************************************
Option Explicit

' The SMTP Source Type

Const GUID_SMTPSourceType          = "{fb65c4dc-e468-11d1-aa67-00c04fa345f6}"

' The base Source GUID for SMTP Service Event Sources
Const GUID_SmtpSvcSourceBase        = "{1b3c0666-e470-11d1-aa67-00c04fa345f6}"

' the Event type GUIDs (COM Categories) for SMTP Service Events
' Protocol Events
Const catidSmtpOnInboundCommand          = "{F6628C8D-0D5E-11d2-AA68-00C04FA35B82}"
Const catidSmtpOnServerResponse          = "{F6628C8E-0D5E-11d2-AA68-00C04FA35B82}"
Const catidSmtpOnSessionStart            = "{F6628C8F-0D5E-11d2-AA68-00C04FA35B82}"
Const catidSmtpOnMessageStart            = "{F6628C90-0D5E-11d2-AA68-00C04FA35B82}"
Const catidSmtpOnPerRecipient            = "{F6628C91-0D5E-11d2-AA68-00C04FA35B82}"
Const catidSmtpOnBeforeData              = "{F6628C92-0D5E-11d2-AA68-00C04FA35B82}"
Const catidSmtpOnSessionEnd              = "{F6628C93-0D5E-11d2-AA68-00C04FA35B82}"

' Transport Events
Const catidSmtpStoreDriver              = "{59175850-e533-11d1-aa67-00c04fa345f6}"
Const catidSmtpOnArrival                = "{FF3CAA23-00B9-11d2-9DFB-00C04FA322BA}"
Const catidSmtpOnTransportSubmission    = "{FF3CAA23-00B9-11d2-9DFB-00C04FA322BA}"
Const catidSmtpOnPreCategorize              = "{A3ACFB0D-83FF-11d2-9E14-00C04FA322BA}"
Const catidSmtpOnCategorize            = "{960252A3-0A3A-11d2-9E00-00C04FA322BA}"
Const catidSmtpOnPostCategorize          = "{76719654-05A6-11d2-9E00-00C04FA322BA}"
Const catidSmtpOnTransportRouter        = "{283430C9-1850-11d2-9E03-00C04FA322BA}"
Const catidSmtpMsgTrackLog              = "{c6df52aa-7db0-11d2-94f4-00c04f79f1d6}"
Const catidSmtpDnsResolver              = "{bd0b4366-8e03-11d2-94f6-00c04f79f1d6}"
Const catidSmtpMaxMsgSize                = "{ebf159de-a67e-11d2-94f7-00c04f79f1d6}"


' Create the GLOBAL SEO Objects used to manage the bindings.

'  The SEO oEventManager object.
'  This object is used to manage the event bindings database.
Dim oEventManager
Set oEventManager = CreateObject("Event.Manager")

'  The SEO COM Category Manager
'  This object is used to add Implements Category keys for registered sinks.
Dim oComCatMan
Set oComCatMan    = CreateObject("Event.ComCat")

'  SEO Utilities
'  This object is used to generate the necessary Source GUID for a particular
'  SMTP Service Virtual Service.
Dim oSEOUtil
Set oSEOUtil      = CreateObject("Event.Util")



' ** DisplayUsage **
' display usage information for this script
'
public sub DisplayUsage
    WScript.echo "usage: cscript smtpreg.vbs <Command> <Arguments>"
    WScript.echo "  Commands:"
    WScript.echo "    /add    <Instance> <Event> <DisplayName | Binding GUID> <SinkClass> <Rule>"
    WScript.echo "    /remove  <Instance> <Event> <DisplayName | Binding GUID>"
    WScript.echo "    /setprop <Instance> <Event> <DisplayName | Binding GUID> <PropertyBag> <PropertyName> "
    WScript.echo "            <PropertyValue>"
    WScript.echo "    /delprop <Instance> <Event> <DisplayName | Binding GUID> <PropertyBag> <PropertyName>"
    WScript.echo "    /enable  <Instance> <Event> <DisplayName | Binding GUID>"
    WScript.echo "    /disable <Instance> <Event> <DisplayName | Binding GUID>"
    WScript.echo "    /enum"
    WScript.echo "  Arguments:"
    WScript.echo "    <Instance> The SMTP virtual service instance"
    WScript.echo "    <Event>    The event name. Can be one of the following:"
    WScript.echo
    WScript.echo "      Transport Events:"
    WScript.echo "        StoreDriver"
    WScript.echo "        OnArrival (OnTransportSubmission)"
    WScript.echo "        OnTransportSubmission"
    WScript.echo "        OnPreCategorize"
    WScript.echo "        OnCategorize"
    WScript.echo "        OnPostCategorize"
    WScript.Echo "        OnTransportRouter"
    WScript.echo "        MsgTrackLog"
    WScript.echo "        DnsResolver "
    WScript.echo "        MaxMsgSize"
    WScript.echo "      Protocol Events:"
    WScript.echo "        OnInboundCommand"
    WScript.echo "        OnServerResponse"
    WScript.echo "        OnSessionStart"
    WScript.echo "        OnMessageStart"
    WScript.echo "        OnPerRecipient"
    WScript.echo "        OnBeforeData"
    WScript.echo "        OnSessionEnd"
    WScript.echo
    WScript.echo "    <DisplayName>  The display name of the event to edit"
    WScript.echo "    <SinkClass>    The sink Programmatic identifier"
    WScript.echo "    <Rule>          The protocol rule to use for the event (ehlo=*,mail from=*, etc)"
    WScript.echo "    <Binding GUID>  The event binding GUID in registry string format: {GUID}"
    WScript.echo "    <PropertyBag>  The ""Source"" or ""Sink"" property bag"
    WScript.echo "    <PropertyName>  The name of the property to edit"
    WScript.echo "    <PropertyValue> The value to assign to the property"
end sub



'
' register a new sink with event manager
'
' iInstance    - The SMTP virtual service instance for which to register the binding.
' szEventName  - Must be "OnArrival"
' szDisplayName - The display name for this new sink
' szProgID      - The ProgId of the event sink COM Class.
' szRule        - The protocol firing rule for the event sink.
' szBindingGUID - Optional. The Binding GUID to use for the binding.
'
public sub RegisterSink(iInstance, szEventName, szDisplayName, szBindingGUID, szProgID, szRule, szPrioVal)

    Dim oBindings
    Dim oBinding
    Dim PrioVal
    Dim catidEventType

    Set oBindings = GetBindings(iInstance, szEventName)
    catidEventType = GetEventTypeCatID(szEventName)

    ' Attempt to add the "ImplementsCategory" key for Sink using ProgID
    ' If the sink is not registered on this machine, this will fail.
        ' If this category is not registered, this method will fail.

    On Error Resume Next
    Dim fRegCompleteOrErr
    fRegCompleteOrErr = False
    Do Until fRegCompleteOrErr
          oComCatMan.RegisterClassImplementsCategory szProgID, catidEventType
          If Err.Number <> 0 Then
              Dim oldErrorNum
              Dim oldErrDesc
              oldErrorNum = Err.Number
              oldErrDesc  = Err.Description
              ' verify the COM category exists:
              Err.Clear
              Dim szCOMCatDesc
              szCOMCatDesc = ""
              szCOMCatDesc = oComCatMan.GetCategoryDescription(catidEventType,0)
              if Err.Number <> 0 Then
                    WScript.Echo "COM Category (EventType) is not registered..."
                    ' Attempt to run SMTPSEOSetup
                    Call ResetSMTPCatIDs()
              Else
                    Wscript.Echo "** Registration Failed **"
                    Wscript.Echo "    Err.Number (HRESULT) = 0x" & Hex(oldErrorNum)
                    WScript.Echo "    Err.Description      = " & oldErrDesc
                    WScript.Echo "    ProgID              = " & szProgID
                    WSCript.Echo "    COM Category        = " & catidEventType
                    WSCript.Echo "    Corresponding Event  = " & szEventName
                    WScript.Echo "** Have you registered your sink COM class on this machine?"
                    WScript.Quit
              End If
          Else
              fRegCompleteOrErr = True
          End If
    Loop

    ' Sink is registered...resume registration


        ' Generate a GUID for the binding if the caller did not specify one
    If szBindingGUID = "" Then
          szBindingGUID = oSEOUtil.GetNewGUID
    End If

    Set oBinding = oBindings.Add(szBindingGUID)
    ' set the binding properties
    oBinding.DisplayName = szDisplayName
    oBinding.SinkClass  = szProgID
    ' register a rule with the binding
    oBinding.SourceProperties.Add "Rule", szRule
    ' register a priority with the binding

    ' Assign the default priority if not specified
        If szPrioVal = "" Then
          szPrioVal = 24575  ' the default
          WScript.Echo "Assigning priority (" & szPrioVal & " in 32767)"
    End If
    oBinding.SourceProperties.Add "Priority", CInt(szPrioVal)

    ' save the binding
    oBinding.Save
    If Err.Number <> 0 Then
          WScript.Echo "Failed to save the binding " & GUID_Binding
          WScript.Echo Err.Number
          WScript.Echo Err.Description
          WScript.Quit
        End If

    WScript.Echo "** SUCCESS **"
    WScript.Echo "Registered Binding:"
    Wscript.ECho " Event Name  :" & oComCatMan.GetCategoryDescription(catidEventType,0)
    WScript.Echo " Display Name:" & szDisplayName
    WScript.Echo " Binding GUID:" & szBindingGUID
    WScript.Echo " ProgID      :" & szProgID
        WScript.Echo "  Rule      :" & szRule
        WScript.Echo "  Priority  :" & szPrioVal & " (0 - 32767, default: 24575)"
    WScript.Echo "  ComCatID  :" & catidEventType
end sub


' ** GetEventTypeCatID **
'  in:  szEventName
'  returns: COM Category ID for the Event (as a string)

Function GetEventTypeCatID(szEventName)
    select case LCase(szEventName)
                case "storedriver"
              GetEventTypeCatID = catidSmtpStoreDriver
          case "onarrival"
              GetEventTypeCatID = catidSmtpOnArrival
                case "ontransportsubmission"
                        GetEventTypeCatID = catidSmtpOnTransportSubmission
          case "onprecategorize"
              GetEventTypeCatID = catidSmtpOnPreCategorize
          case "oncategorize"
              GetEventTypeCatID = catidSmtpOnCategorize
          case "onpostcategorize"
              GetEventTypeCatID = catidSmtpOnPostCategorize
          case "ontransportrouter"
              GetEventTypeCatID = catidSmtpOnTransportRouter
          case "msgtracklog"
              GetEventTypeCatID = catidSmtpMsgTrackLog
          case "dnsresolver"
              GetEventTypeCatID = catidSmtpDnsResolver
          case "maxmsgsize"
              GetEventTypeCatID = catidSmtpMaxMsgSize
                case "oninboundcommand"
              GetEventTypeCatID = catidSmtpOnInBoundCommand
          case "onserverresponse"
              GetEventTypeCatID = catidSmtpOnServerResponse
                case "onsessionstart"
              GetEventTypeCatID = catidSmtpOnSessionStart
          case "onmessagestart"
              GetEventTypeCatID = catidSmtpOnMessageStart
          case "onperrecipient"
              GetEventTypeCatID = catidSmtpOnPerRecipient
          case "onbeforedata"
              GetEventTypeCatID = catidSmtpOnBeforeData
          case "onsessionend"
              GetEventTypeCatID = catidSmtpOnSessionEnd
          case else
              WScript.Echo "Unrecognized Event Name: " & szEventName
              ' This is fatal...quit!
              WScript.Quit(-1)
    end select
End Function


'
' ** UnregisterSink **
'  Unregister a previously registered sink
'
' iInstance    - the SMTP Virtual Service Instance
' szEventName  - The Event name
' szDisplayName - The display name of the event to remove
' szBindingGUID - Optional. The Binding GUID to use.

public sub UnregisterSink(iInstance, szEventName, szDisplayName, szBindingGUID)

    Dim oBindings
    dim catidEventType

    Set oBindings = GetBindings(iInstance,szEventName)
    catidEventType = GetEventTypeCatID(szEventName)

    ' If the Binding GUID was given, use it to remove the binding
    ' otherwise, get it using the display name

    If szBindingGUID = "" Then
          szBindingGUID = GetBindingGUIDFromDisplayName(szDisplayName,oBindings)
    End If

    oBindings.Remove szBindingGUID

    WScript.Echo "** SUCCESS **"
    WScript.Echo "Removed Binding:"
    Wscript.ECho " Event Name  :" & oComCatMan.GetCategoryDescription(catidEventType,0)
    WScript.Echo " Display Name:" & szDisplayName
    WScript.Echo " Binding GUID:" & szBindingGUID
    WScript.Echo "  ComCatID  :" & catidEventType
end sub


' ****************
' * EditProperty *
' ****************
' add or remove a property from the source or sink propertybag for an event binding
'
' iInstance      - The SMTP instance to edit
' szEvent        - The event name (OnArrival, OnMessageSubmission, etc)
' szDisplayName  - The display name of the event
' szBindingGUID  - Optional. The GUID for the binding. Display name is used if not supplied
' szPropertyBag  - The property bag to edit ("source" or "sink")
' szOperation    - "add" or "remove"
' szPropertyName  - The name to edit in the property bag
' szPropertyValue - The value to assign to the name (ignored for remove)
'
public sub EditProperty(iInstance, szEventName, szDisplayName, szBindingGUID, szPropertyBag, szOperation, szPropertyName, szPropertyValue)
    Dim oBinding
    Dim oPropertyBag

    Set oBinding = GetBinding(iInstance, szEventName, szDisplayName, szBindingGUID)

    select case LCase(szPropertyBag)
          case "source"
              set oPropertyBag = oBinding.SourceProperties
          case "sink"
              set oPropertyBag = oBinding.SinkProperties
          case else
              WScript.echo "invalid propertybag: " & szPropertyBag
              exit sub
          end select

          ' figure out what operation we want to perform
    select case LCase(szOperation)
          case "remove"
              ' they want to remove szPropertyName from the
              ' property bag
              oPropertyBag.Remove szPropertyName
              WScript.echo "removed property " & szPropertyName
          case "add"
              ' add szPropertyName to the property bag and
              ' set its value to szValue.  if this value
              ' already exists then this will change  the value
              ' it to szValue.
              oPropertyBag.Add szPropertyName, szPropertyValue
              WScript.echo "set property " & szPropertyName & " to " & szPropertyValue
          case else
              WScript.echo "invalid operation: " & szOperation
              exit sub
    end select
    ' save the binding
    oBinding.Save
end sub


' ******************
' * SetSinkEnabled *
' ******************
' Enable/disable a registered sink
'
' iInstance    - The instance to work against
' szEvent      - The event name
' szDisplayName - The display name for this sink
' szBindingGUID - The Binding GUID (optional)
'
public sub SetSinkEnabled(iInstance, szEvent, szDisplayName, szBindingGUID, szEnable)
    Dim oBinding
    Set oBinding = GetBinding(iInstance, szEvent, szDisplayName, szBindingGUID)
    Select Case(szEnable)
          case "True"
              oBinding.Enabled = True
              oBinding.Save
              wscript.echo "Success: Sink Binding Enabled"
          case "False"
              oBinding.Enabled = False
              oBinding.Save
              wscript.echo "Success: Sink Binding Disabled"
          case else
              Wscript.Echo "Error in SetSinkEnabled Routine: Invalid option."
              Wscript.Quit
    End Select
end sub


' ***********************
' * GetBindings Function *
' ***********************
'  Returns a reference to the SEO binding object for a particular binding
'
'  iInstance    - The SMTP Virtual Service Instance (> 0)
'  szEventName  - The Name of the Event (OnArrival, etc)

Function GetBindings(iInstance, szEventName)
    Dim oSourceType
    Dim catidEventType
    Dim oSource
    Dim GUID_SMTPInstanceSource

    catidEventType = GetEventTypeCatID(CStr(szEventName))

        ' Make sure iInstance is not less than 1.
        If iInstance < 1 Then
            WScript.Echo "Invalid SMTP service instance: " & CStr(iInstance)
            WScript.Quit
        End If

        ' Generate Source GUID using SMTP source base GUID and the instance number.
        ' Do this using the SEO Util object's GetIndexedGUID method.
        GUID_SMTPInstanceSource = oSEOUtil.GetIndexedGUID(GUID_SmtpSvcSourceBase,iInstance)


        ' Get the binding manager for this source
        Set oSourceType = oEventManager.SourceTypes(GUID_SMTPSourceType)
        Set oSource    = oSourceType.Sources(GUID_SMTPInstanceSource)

    If typename(oSource) = "Nothing" Then
          WScript.Echo "SMTP Virtual Service # " & iInstance & " Source not present...exiting."
                WScript.Quit(-1)
        End If

    Set GetBindings = oSource.GetBindingManager.Bindings(catidEventType)


End Function



' ***********************
' * GetBinding Function *
' ***********************
'  Returns a reference to the SEO binding object for a particular binding
'
'  iInstance    - The SMTP Virtual Service Instance (> 0)
'  szEventName  - The Name of the Event (OnArrival, etc)
'  szDisplayName - The Display Name for the binding. Used to retrieve binding GUID
'                  if is it not supplied
'  szBindingGUID - The GUID for the binding. If not "", this GUID is used.
'
Function GetBinding(iInstance, szEventName, szDisplayName,szBindingGUID)
    Dim oSourceType
    Dim catidEventType
    Dim oSource
    Dim oBindings
    Dim oBinding
    Dim GUID_SMTPInstanceSource

    catidEventType = GetEventTypeCatID(CStr(szEventName))

        ' Make sure iInstance is not less than 1.
        If iInstance < 1 Then
            WScript.Echo "Invalid SMTP service instance: " & CStr(iInstance)
            WScript.Quit
        End If

        ' Generate Source GUID using SMTP source base GUID and the instance number.
        ' Do this using the SEO Util object's GetIndexedGUID method.
        GUID_SMTPInstanceSource = oSEOUtil.GetIndexedGUID(GUID_SmtpSvcSourceBase,iInstance)

        ' Get the binding manager for this source
        Set oSourceType = oEventManager.SourceTypes(GUID_SMTPSourceType)
        Set oSource    = oSourceType.Sources(GUID_SMTPInstanceSource)

    If typename(oSource) = "Nothing" Then
          WScript.Echo "SMTP Virtual Service # " & iInstance & " Source not present...exiting."
                WScript.Quit(-1)
        End If

        Set oBindings  = oSource.GetBindingManager.Bindings(catidEventType)

    If szBindingGUID = "" Then
          szBindingGUID = GetBindingGUIDFromDisplayName(SzDisplayName, oBindings)
    End If

    Set oBinding = oBindings(szBindingGUID)
    If TypeName(oBinding) = "Nothing" Then
          WScript.Echo "** ERROR **"
          WScript.Echo "No binding present for GUID " & szBindingGUID
          WScript.Quit
    Else
          Set GetBinding = oBinding
    End If

End Function


'
' this helper function takes an IEventSource object and a event category
' and dumps all of the bindings for this category under the source
'
' Source - the IEventSource object to display the bindings for
' GUIDComCat - the event category to display the bindings for
'
public sub DisplayBindingHelper(oSource, oEventType)
    Dim Binding
    Dim PropName
    Dim Props

    ' walk each of the registered bindings for this component category
    dim strSpaces
    strSpaces = "                        "
    for each Binding in oSource.GetBindingManager.Bindings(oEventType.id)
          wscript.echo "                        ---------"
          wscript.echo "                      | Binding |"
          Wscript.Echo "                        ---------"
          WScript.Echo strSpaces & "          Event: " & oEventType.DisplayName
          WScript.echo strSpaces & "              ID: " & Binding.ID
          WScript.echo strSpaces & "            Name: " & Binding.DisplayName
          WScript.echo strSpaces & "      SinkClass: " & Binding.SinkClass
          WScript.echo strSpaces & "        Enabled: " & Binding.Enabled

          Set Props = Binding.SourceProperties
          If Props.Count > 0 Then
              WScript.echo strSpaces & "SourceProperties: {"
              for each PropName in Props
                    WScript.echo strSpaces & "                  " & propname & " = " & Binding.SourceProperties(propname)
              next
              WScript.echo strSpaces & "                  }"
          End If

          Set Props = Binding.SinkProperties
          If Props.Count > 0 Then
              WScript.echo strSpaces & "SinkProperties    {"
              for each Propname in Props
                    WScript.echo strSpaces & "                  " & PropName & " = " & Props(PropName)
              next
              WScript.echo strSpaces & "                  }"
          End If
    next
end sub

'
' dumps all of the information in the binding database related to SMTP
'
public sub DisplaySinks
    Dim SourceType
    Dim Source
    Dim eventtype
    On Error Resume Next
    For Each SourceType in oEventManager.SourceTypes
          wscript.echo " -------------"
          Wscript.Echo "| Source Type |"
          Wscript.Echo " -------------"
          Wscript.echo " Name: " & SourceType.DisplayName
          WScript.Echo "  ID: " & SourceType.ID
          for each eventtype in sourcetype.eventtypes
              wscript.echo "              ------------"
              wscript.echo "              | Event Type |"
              Wscript.Echo "              ------------"
              WScript.Echo "              Name: " & eventtype.DisplayName
              WSCript.Echo "                ID: " & eventtype.ID
          next
          for each Source in SourceType.Sources
              ' display the source properties
              wscript.echo "              --------"
              wscript.echo "              | Source |"
              Wscript.Echo "              --------"
              WScript.echo "              Name: " & Source.DisplayName
              WScript.echo "                ID: " & Source.ID
              for each eventtype in sourcetype.eventtypes
                    call DisplayBindingHelper(Source, eventtype)
              next
          next
    Next
end sub


' ************************
' * SetDisplayNameOrGUID *
' ************************
'  Examines the arguments to determine whether a GUID
'  or a display name was passed. All GUIDs must be passed in the form
'  "{871736C0-FD85-11D0-869A-00C04FD65616}"
'  and display names must not start with a left-bracket "{"
'

Sub SetDisplayNameOrGUID(ByRef szArg, ByRef szDisplayName, ByRef szBindingGUID)

  ' check for left bracked used for a GUID
  If (InStr(1,szArg, "{", 1) = 1) Then
    WScript.Echo "Binding GUID specified: " & szArg
    szBindingGUID = szArg
    szDisplayName = ""
  Else
    WScript.Echo "Binding Display Name Specified: " & szArg
    szBindingGUID = ""
    szDisplayName = szArg
  End If
End Sub


' *********************************
' * GetBindingGUIDFromDisplayName *
' *********************************
' Attempts to return the binding GUID for a binding
' based upon the binding display name
'
' szDisplayName  - [in] The display name for the binding
' oBindings      - [in] The SEO EventBindings Object
'
' Returns
'  If successful, returns the binding GUID for the binding.
'  The first matched display name is used. That is, if multiple bindings
'  have the same display name, the first found is used.

Function GetBindingGUIDFromDisplayName(SzDisplayName, oBindings)

    Dim oBinding

    for each oBinding in oBindings
          if oBinding.DisplayName = szDisplayName then
              GetBindingGUIDFromDisplayName = oBinding.ID
              exit function
          End If
    next

    WScript.Echo "Failed to find binding with display name:" & szDisplayName
    WScript.Quit

End Function



' *******************
' * ResetSMTPCatIDs *
' *******************
'  - Registers the various COM categories for SMTP transport and protocol
'  events.
'  - Adds each as an event type to the SMTP Service Source Type
'
'
Sub ResetSMTPCatIDs()

    WScript.Echo "Running ResetSMTPCatIDs...one moment"
    On Error Resume Next
    Err.Clear

    Dim oSourceType
    Set oSourceType = oEventManager.SourceTypes(GUID_SMTPSourceType)
    If TypeName(oSourceType) = "Nothing" Then
          WScript.Echo "** ERROR **"
          Wscript.Echo "No SMTP Source Type registered."
          WScript.Echo "Is the SMTP Service installed on this machine?"
          WScript.Quit
    End If

    oComCatMan.RegisterCategory catidSmtpStoreDriver,  "SMTP StoreDriver", 0
    oSourceType.EventTypes.Add  catidSmtpStoreDriver

    oComCatMan.RegisterCategory catidSmtpOnTransportSubmission, "SMTP OnTransportSubmission/OnArrival", 0
    oSourceType.EventTypes.Add  catidSmtpOnTransportSubmission

    oComCatMan.RegisterCategory catidSmtpOnPreCategorize, "SMTP OnPreCategorize",0
    oSourceType.EventTypes.Add  catidSmtpOnPreCategorize

    oComCatMan.RegisterCategory catidSmtpOnCategorize, "SMTP OnCategorize",0
    oSourceType.EventTypes.Add  catidSmtpOnCategorize

    oComCatMan.RegisterCategory catidSmtpOnPostCategorize, "SMTP OnPostCategorize",0
    oSourceType.EventTypes.Add  catidSmtpOnPostCategorize

    oComCatMan.RegisterCategory catidSmtpOnTransportRouter, "SMTP OnTransportRouter",0
    oSourceType.EventTypes.Add  catidSmtpOnTransportRouter

    oComCatMan.RegisterCategory catidSmtpMsgTrackLog,      "SMTP MsgTrackLog", 0
    oSourceType.EventTypes.Add  catidSmtpMsgTrackLog

    oComCatMan.RegisterCategory catidSmtpDnsResolver,      "SMTP DnsResolver", 0
    oSourceType.EventTypes.Add  catidSmtpDnsResolver

    oComCatMan.RegisterCategory catidSmtpMaxMsgSize,      "SMTP MaxMsgSize", 0
    oSourceType.EventTypes.Add  catidSmtpMaxMsgSize

    oComCatMan.RegisterCategory catidSmtpOnInBoundCommand, "SMTP OnInBoundCommand", 0
    oSourceType.EventTypes.Add  catidSmtpOnInBoundCommand

    oComCatMan.RegisterCategory catidSmtpOnServerResponse, "SMTP OnServerResponse", 0
    oSourceType.EventTypes.Add  catidSmtpOnServerResponse

    oComCatMan.RegisterCategory catidSmtpOnSessionStart, "SMTP OnSessionStart", 0
    oSourceType.EventTypes.Add  catidSmtpOnSessionStart

    oComCatMan.RegisterCategory catidSmtpOnMessageStart, "SMTP OnMessageStart", 0
    oSourceType.EventTypes.Add  catidSmtpOnMessageStart

    oComCatMan.RegisterCategory catidSmtpOnPerRecipient, "SMTP OnPerRecipient", 0
    oSourceType.EventTypes.Add  catidSmtpOnPerRecipient

    oComCatMan.RegisterCategory catidSmtpOnBeforeData, "SMTP OnBeforeData", 0
    oSourceType.EventTypes.Add  catidSmtpOnBeforeData

    oComCatMan.RegisterCategory catidSmtpOnSessionEnd,  "SMTP OnSessionEnd", 0
    oSourceType.EventTypes.Add  catidSmtpOnSessionEnd

    If Err.Number <> 0 Then
          WScript.Echo "** ERROR ** "
          Wscript.Echo "Error registering COM categories"
          WScript.Echo Err.Number
          WScript.Echo Err.Description
          Wscript.Echo "Make sure the SMTP Service is installed on the machine"
          WScript.Quit
    End If

    ' Remove the duplicate, redundant SMTP SourceType
    Const GUID_ExtraSMTPSourceType = "{4f803d90-fd85-11d0-869a-00c04fd65616}"
    EVentManager.SourceTypes.Remove(GUID_ExtraSMTPSourceType)

End Sub




' **********************
' * Main Routine Start *
' **********************

Dim iInstance
Dim szEvent
Dim szDisplayName
Dim szSinkClass
Dim szRule
Dim szPrio
Dim szBindingGUID
Dim szPropertyBag
Dim szPropertyName
Dim szPropertyValue
dim bCheck
Dim ArgCount
'
' this is the main body of our script.  it reads the command line parameters
' specified and then calls the appropriate function to perform the operation
'
if WScript.Arguments.Count = 0 then
    call DisplayUsage
else
    ArgCount = WScript.Arguments.Count
    Select Case LCase(WScript.Arguments(0))
          Case "/?"
              DisplayUsage
          Case "/add"
              if not ArgCount = 6 and not ArgCount = 7 then
                    call DisplayUsage
              else
                    iInstance  = WScript.Arguments(1)
                    szEvent    = WScript.Arguments(2)
                    Call SetDisplayNameOrGUID(WScript.Arguments(3), szDisplayName, szBindingGUID)
                    szSinkClass = WScript.Arguments(4)
                    szRule      = WScript.Arguments(5)
                    If ArgCount = 7 Then
                        szPrio = WScript.Arguments(6)
                    Else
                        szPrio = ""
                    End If
                    call RegisterSink(iInstance, szEvent, szDisplayName, szBindingGUID, szSinkClass, szRule, szPrio)
              end if
          Case "/remove"
              if not ArgCount = 4 then
                    call DisplayUsage
              else
                    iInstance = WScript.Arguments(1)
                    szEvent = WScript.Arguments(2)
                    Call SetDisplayNameOrGUID(WScript.Arguments(3), szDisplayName, szBindingGUID)
                    call UnregisterSink(iInstance, szEvent, szDisplayName, szBindingGUID)
              end if
          Case "/setprop"
              if not ArgCount = 7 then
                    call DisplayUsage
              else
                    iInstance = WScript.Arguments(1)
                    szEvent = WScript.Arguments(2)
                    Call SetDisplayNameOrGUID(WScript.Arguments(3), szDisplayName, szBindingGUID)
                    szPropertyBag = WScript.Arguments(4)
                    szPropertyName = WScript.Arguments(5)
                    szPropertyValue = WScript.Arguments(6)
                    call EditProperty(iInstance, szEvent, szDisplayName, szBindingGUID, szPropertyBag, "add", szPropertyName, szPropertyValue)
              end if
          Case "/delprop"
              if not ArgCount = 6 then
                    call DisplayUsage
              else
                    iInstance = WScript.Arguments(1)
                    szEvent = WScript.Arguments(2)
                    Call SetDisplayNameOrGUID(WScript.Arguments(3), szDisplayName, szBindingGUID)
                    szPropertyBag = WScript.Arguments(4)
                    szPropertyName = WScript.Arguments(5)
                    call EditProperty(iInstance, szEvent, szDisplayName, szBindingGUID, szPropertyBag, "remove", szPropertyName, "")
              end if
          Case "/enable"
              if not ArgCount = 4 then
                    call DisplayUsage
              else
                    iInstance = WScript.Arguments(1)
                    szEvent = WScript.Arguments(2)
                    Call SetDisplayNameOrGUID(WScript.Arguments(3), szDisplayName, szBindingGUID)
                    call SetSinkEnabled(iInstance, szEvent, szDisplayName, szBindingGUID, "True")
              end if
          Case "/disable"
              if not ArgCount = 4 then
                    call DisplayUsage
              else
                    iInstance = WScript.Arguments(1)
                    szEvent = WScript.Arguments(2)
                    Call SetDisplayNameOrGUID(WScript.Arguments(3), szDisplayName, szBindingGUID)
                    call SetSinkEnabled(iInstance, szEvent, szDisplayName, szBindingGUID, "False")
              end if
          Case "/enum"
              if not ArgCount = 1 then
                    call DisplayUsage
              else
                    call DisplaySinks
              end if
          Case "/resetcatids"
              call ResetSMTPCatIDs
          Case Else
              call DisplayUsage
    End Select
end if
'------------------------------------------------------------


Kør filen c:\eventsink\Install.cmd for at instalere.
Kør filen c:\eventsink\UnInstall.cmd for at afinstalere.



:-)
Avatar billede nik- Nybegynder
14. oktober 2004 - 16:18 #2
Hej tpo,

Beklager ikke at have vendt tilbage før nu. Der har lige været gang i flytning o.m.a.
Men nu skal der gang i udfasning af gammelt postdomænenavn.
Jeg har prøvet scriptene af og de virker jo umiddelbart! Kanon!
MEN... (der er altid et "men" :-) )

Det er jo ikke hensigtsmæssigt at smide et svar i hovedet på alt indkommende på *@abc.dk (gammelt domænenavn). Der er jo f.eks. administrative postkasser der bruges til maillister (og en mailliste gider jo ikke have svar tilbage) og ikke-eksisterende/ugyldige emailadresser.

Hvad siger du til at udvide scriptet til at kikke i AD om adressen hænger på en bruger der medlem af en bedstemt gruppe i AD?

Altså for at der svares automatisk, skal følgende være opfyldt:
1. Er SMTP modtager *.abc.dk
2. Er adressen overhovedet valid
3. Er den bruger adressen knyttet til i AD gruppen NewDomainReply

...og jeg véd at jeg i spørgsmålet skrev "til alle brugere der skriver til abc.dk", men havde ikke lige tænkt praktikken helt igennem.
Pointene er under alle omstændigheder dine - men jeg håber da at et geni som dig, let kan ryste mere ud af ærmet :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Netcompany A/S

Software Developer

Netcompany A/S

IT Consultant

Cognizant Technology Solutions Denmark ApS

Azure Architect

Danoffice IT

Senior AI Specialist