Photo Gallery Member List Search Calendars FAQ Ticket List Log Out


sink even n arriving email

 
Logged in as: Guest
arrSession:exec spGetSession 2,2,59125
 Active Users: There are 0 members and 0 guests.
 Users viewing this topic: none
 

 

 
  
  Printable Version
All Forums >> [Scripting] >> WSH & Client Side VBScript >> sink even n arriving email
  Do you like VisualBasicScript.com? Link to us and help spread the word about our forum. Thanks!
Page: [1]
Login
Message << Older Topic   Newer Topic >>
 sink even n arriving email - 4/15/2008 1:00:23 AM   
  pelegk2

 

Posts: 77
Score: 0
Joined: 3/27/2005
From: Israel
Status: offline
i have sink event which catch incoming email and take the subject+data.
how can i take from the incoming email all the attachment and save them as file to the HD?

thnaks in advance
peleg
 
 
Post #: 1
 
 RE: sink even n arriving email - 4/15/2008 1:03:11 AM   
  ebgreen


Posts: 4613
Score: 31
Joined: 7/12/2005
Status: offline
Please post the code that you have so we can see what objects you are using.

_____________________________

"... when you are good and crazy, oooh, oooh, oooh, the sky is the limit!" - The Tick
Goog places to start:http://www.visualbasicscript.com/m_24727/tm.htm
http://www.visualbasicscript.com/m_47117/tm.htm

(in reply to pelegk2)
 
 
Post #: 2
 
 RE: sink even n arriving email - 4/15/2008 1:58:38 AM   
  pelegk2

 

Posts: 77
Score: 0
Joined: 3/27/2005
From: Israel
Status: offline

      

< Message edited by pelegk2 -- 4/15/2008 2:00:56 AM >

(in reply to pelegk2)
 
 
Post #: 3
 
 RE: sink even n arriving email - 4/15/2008 2:05:26 AM   
  ebgreen


Posts: 4613
Score: 31
Joined: 7/12/2005
Status: offline
What is the Msg object? Could you show us the code that is calling the Sub.

_____________________________

"... when you are good and crazy, oooh, oooh, oooh, the sky is the limit!" - The Tick
Goog places to start:http://www.visualbasicscript.com/m_24727/tm.htm
http://www.visualbasicscript.com/m_47117/tm.htm

(in reply to pelegk2)
 
 
Post #: 4
 
 RE: sink even n arriving email - 4/15/2008 3:21:48 AM   
  pelegk2

 

Posts: 77
Score: 0
Joined: 3/27/2005
From: Israel
Status: offline
 
Set CompanyName=somename
Set Rule=rcpt  to=*@mydomain.com;
Set ScriptPath=D:\1.vbs
cscript D:\smtpreg.vbs /add     1 onarrival "%CompanyName%" CDO.SS_SMTPOnArrivalSink "%Rule%"
cscript D:\smtpreg.vbs /setprop 1 onarrival "%CompanyName%" Sink ScriptName "%ScriptPath%"
cscript D:\smtpreg.vbs /setprop 1 onarrival "%CompanyName%" Source Priority 100

< Message edited by pelegk2 -- 4/15/2008 3:58:18 AM >

(in reply to pelegk2)
 
 
Post #: 5
 
 RE: sink even n arriving email - 4/15/2008 3:25:46 AM   
  ebgreen


Posts: 4613
Score: 31
Joined: 7/12/2005
Status: offline
I'm not understanding. Could you please show the code that actually calls the sub?

_____________________________

"... when you are good and crazy, oooh, oooh, oooh, the sky is the limit!" - The Tick
Goog places to start:http://www.visualbasicscript.com/m_24727/tm.htm
http://www.visualbasicscript.com/m_47117/tm.htm

(in reply to pelegk2)
 
 
Post #: 6
 
 RE: sink even n arriving email - 4/15/2008 4:03:40 AM   
  pelegk2

 

Posts: 77
Score: 0
Joined: 3/27/2005
From: Israel
Status: offline
the bind activeated this SMTPREG.vbs which calls the function in the first code i gave :
quote:


'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 registering for SMTP Protocol sinks.
'
'File Name: smtpreg.vbs
'
'
' Copyright (c) Microsoft Corporation 1993-1999. All rights reserved.
'------------------------------------------------------------------------------
Option Explicit
'
'
' the OnArrival event GUID
Const GUIDComCatOnArrival = "{ff3caa23-00b9-11d2-9dfb-00C04FA322BA}"
' the SMTP source type
Const GUIDSourceType = "{FB65C4DC-E468-11D1-AA67-00C04FA345F6}"
'
Const GUIDCat = "{871736c0-fd85-11d0-869a-00c04fd65616}"
Const GUIDSources = "{DBC71A31-1F4B-11d0-869D-80C04FD65616}"
' the SMTP service display name.  This is used to key which service to
' edit
Const szService = "smtpsvc"
' the event manager object.  This is used to communicate with the
' event binding database.
Dim EventManager
Set EventManager = WScript.CreateObject("Event.Manager")
'
' register a new sink with event manager
'
' iInstance - the instance to work against
' szEvent - OnArrival
' szDisplayName - the display name for this new sink
' szProgID - the progid to call for this event
' szRule - the rule to set for this event
'
public sub RegisterSink(iInstance, szEvent, szDisplayName, szProgID, szRule)
Dim SourceType
Dim szSourceDisplayName
Dim Source
Dim Binding
Dim GUIDComCat
Dim PrioVal
' figure out which event they are trying to register with and set
' the comcat for this event in GUIDComCat
select case LCase(szEvent)
 case "onarrival"
  GUIDComCat = GUIDComCatOnArrival
 case else
  WScript.echo "invalid event: " & szEvent
  exit sub
end select
' enumerate through each of the registered instances for the SMTP source
' type and look for the display name that matches the instance display
' name
set SourceType = EventManager.SourceTypes(GUIDSourceType)
szSourceDisplayName = szService & " " & iInstance
for each Source in SourceType.Sources
 if Source.DisplayName = szSourceDisplayName then
  ' we've found the desired instance.  now add a new binding
  ' with the right event GUID.  by not specifying a GUID to the
  ' Add method we get server events to create a new ID for this
  ' event
  set Binding = Source.GetBindingManager.Bindings(GUIDComCat).Add("")
  ' set the binding properties
  Binding.DisplayName = szDisplayName
  Binding.SinkClass = szProgID
  ' register a rule with the binding
  Binding.SourceProperties.Add "Rule", szRule
  ' register a priority with the binding
  PrioVal = GetNextPrio(Source, GUIDComCat)
  If PrioVal < 0 then
   WScript.Echo "assigning priority to default value (24575)"
   Binding.SourceProperties.Add "Priority", 24575
  else 
   WScript.Echo "assigning priority (" & PrioVal & " of 32767)"
   Binding.SourceProperties.Add "Priority", PrioVal
  end if
  ' save the binding
  Binding.Save
  WScript.Echo "registered " & szDisplayName
  exit sub
 end if
next
end sub
'
' iterate through the bindings in a source, find the binding
' with the lowest priority, and return the next priority value.
' If the next value exceeds the range, return -1.
'
public function GetNextPrio(oSource, GUIDComCat)
' it's possible that priority values will not be
' numbers, so we add error handling for this case
on error resume next
Dim Bindings
Dim Binding
Dim nLowestPrio
Dim nPrioVal
nLowestPrio = 0
set Bindings = oSource.GetBindingManager.Bindings(GUIDComCat)
' if the bindings collection is empty, then this is the first
' sink.  It gets the highest priority (0).
if Bindings.Count = 0 then
 GetNextPrio = 0
else
 ' get the lowest existing priority value
 for each Binding in Bindings
  nPrioVal = Binding.SourceProperties.Item("Priority")
  if CInt(nPrioVal) > nLowestPrio then
   if err.number = 13 then
    err.clear
   else
    nLowestPrio = CInt(nPrioVal)
   end if
  end if
 next
 ' assign priority values in increments of 10 so priorities
 ' can be shuffled later without the need to reorder all
 ' binding priorities.  Valid priority values are 0 - 32767
 if nLowestPrio + 10 > 32767 then
  GetNextPrio = -1
 else
  GetNextPrio = nLowestPrio + 10
 end if
end if
end function 
'
' check for a previously registered sink with the passed in name
'
' iInstance - the instance to work against
' szEvent - OnArrival
' szDisplayName - the display name of the event to check
' bCheckError - Any errors returned
public sub CheckSink(iInstance, szEvent, szDisplayName, bCheckError)
Dim SourceType
Dim GUIDComCat
Dim szSourceDisplayName
Dim Source
Dim Bindings
Dim Binding
bCheckError = FALSE
select case LCase(szEvent)
 case "onarrival"
  GUIDComCat = GUIDComCatOnArrival
 case else
  WScript.echo "invalid event: " & szEvent
  exit sub
end select
' find the source for this instance
set SourceType = EventManager.SourceTypes(GUIDSourceType)
szSourceDisplayName = szService & " " & iInstance
for each Source in SourceType.Sources
 if Source.DisplayName = szSourceDisplayName then
  ' find the binding by display name.  to do this we enumerate
  ' all of the bindings and try to match on the display name
  set Bindings = Source.GetBindingManager.Bindings(GUIDComCat)
  for each Binding in Bindings
   if Binding.DisplayName = szDisplayName then
    ' we've found the binding, now log an error
    WScript.Echo "Binding with the name " & szDisplayName & " already exists"
    exit sub
   end if
  next
 end if
next
bCheckError = TRUE
end sub
'
' unregister a previously registered sink
'
' iInstance - the instance to work against
' szEvent - OnArrival
' szDisplayName - the display name of the event to remove
'
public sub UnregisterSink(iInstance, szEvent, szDisplayName)
Dim SourceType
Dim GUIDComCat
Dim szSourceDisplayName
Dim Source
Dim Bindings
Dim Binding
select case LCase(szEvent)
 case "onarrival"
  GUIDComCat = GUIDComCatOnArrival
 case else
  WScript.echo "invalid event: " & szEvent
  exit sub
end select
' find the source for this instance
set SourceType = EventManager.SourceTypes(GUIDSourceType)
szSourceDisplayName = szService & " " & iInstance
for each Source in SourceType.Sources
 if Source.DisplayName = szSourceDisplayName then
  ' find the binding by display name.  to do this we enumerate
  ' all of the bindings and try to match on the display name
  set Bindings = Source.GetBindingManager.Bindings(GUIDComCat)
  for each Binding in Bindings
   if Binding.DisplayName = szDisplayName then
    ' we've found the binding, now remove it
    Bindings.Remove(Binding.ID)
    WScript.Echo "removed " & szDisplayName & " " & Binding.ID
   end if
  next
 end if
next
end sub
'
' add or remove a property from the source or sink propertybag for an event
'
' iInstance - the SMTP instance to edit
' szEvent - the event type (OnArrival)
' szDisplayName - the display name of the event
' 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, szEvent, szDisplayName, szPropertyBag, szOperation, szPropertyName, szPropertyValue)
Dim SourceType
Dim GUIDComCat
Dim szSourceDisplayName
Dim Source
Dim Bindings
Dim Binding
Dim PropertyBag
select case LCase(szEvent)
 case "onarrival"
  GUIDComCat = GUIDComCatOnArrival
 case else
  WScript.echo "invalid event: " & szEvent
  exit sub
end select
' find the source for this instance
set SourceType = EventManager.SourceTypes(GUIDSourceType)
szSourceDisplayName = szService & " " & iInstance
for each Source in SourceType.Sources
 if Source.DisplayName = szSourceDisplayName then
  set Bindings = Source.GetBindingManager.Bindings(GUIDComCat)
  ' find the binding by display name.  to do this we enumerate
  ' all of the bindings and try to match on the display name
  for each Binding in Bindings
   if Binding.DisplayName = szDisplayName then
    ' figure out which set of properties we want to modify
    ' based on the szPropertyBag parameter
    select case LCase(szPropertyBag)
     case "source"
      set PropertyBag = Binding.SourceProperties
     case "sink"
      set PropertyBag = Binding.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
      PropertyBag.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.
      PropertyBag.Add szPropertyName, szPropertyValue
      WScript.echo "set property " & szPropertyName & " to " & szPropertyValue
     case else
      WScript.echo "invalid operation: " & szOperation
      exit sub
    end select
    ' save the binding
    Binding.Save
   end if
  next
 end if
next
end sub
'
' 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 DisplaySinksHelper(Source, GUIDComCat)
Dim Binding
Dim propval
' walk each of the registered bindings for this component category
for each Binding in Source.GetBindingManager.Bindings(GUIDComCat)
 ' display the binding properties
 WScript.echo "    Binding " & Binding.ID & " {"
 WScript.echo "      DisplayName = " & Binding.DisplayName
 WScript.echo "      SinkClass = " & Binding.SinkClass
 if Binding.Enabled = True then
  WScript.echo "      Status = Enabled"
 else
  WScript.echo "      Status = Disabled"
 end if
 ' walk each of the source properties and display them
 WScript.echo "      SourceProperties {"
 for each propval in Binding.SourceProperties
  WScript.echo "        " & propval & " = " & Binding.SourceProperties.Item(propval)
 next
 WScript.echo "      }"
 ' walk each of the sink properties and display them
 WScript.echo "      SinkProperties {"
 for each Propval in Binding.SinkProperties
  WScript.echo "        " & propval & " = " & Binding.SinkProperties.Item(Propval)
 next
 WScript.echo "      }"
 WScript.echo "    }"
next
end sub
'
' dumps all of the information in the binding database related to SMTP
'
public sub DisplaySinks
Dim SourceType
Dim Source
' look for each of the sources registered for the SMTP source type
set SourceType = EventManager.SourceTypes(GUIDSourceType)
for each Source in SourceType.Sources
 ' display the source properties
 WScript.echo "Source " & Source.ID & " {"
 WScript.echo "  DisplayName = " & Source.DisplayName
 ' display all of the sinks registered for the OnArrival event
 WScript.echo "  OnArrival Sinks {"
 call DisplaySinksHelper(Source, GUIDComCatOnArrival)
 WScript.echo "  }"
next
end sub
'
' enable/disable a registered sink
'
' iInstance - the instance to work against
' szEvent - OnArrival
' szDisplayName - the display name for this new sink
'
public sub SetSinkEnabled(iInstance, szEvent, szDisplayName, szEnable)
Dim SourceType
Dim GUIDComCat
Dim szSourceDisplayName
Dim Source
Dim Bindings
Dim Binding
select case LCase(szEvent)
 case "onarrival"
  GUIDComCat = GUIDComCatOnArrival
 case else
  WScript.echo "invalid event: " + szEvent
  exit sub
end select
' find the source for this instance
set SourceType = EventManager.SourceTypes(GUIDSourceType)
szSourceDisplayName = szService + " " + iInstance
for each Source in SourceType.Sources
 if Source.DisplayName = szSourceDisplayName then
  ' find the binding by display name.  to do this we enumerate
  ' all of the bindings and try to match on the display name
  set Bindings = Source.GetBindingManager.Bindings(GUIDComCat)
  for each Binding in Bindings
   if Binding.DisplayName = szDisplayName then
    ' we've found the binding, now enable/disable it
    ' we don't need "case else' because szEnable's value
    ' is set internally, not by users
    select case LCase(szEnable)
     case "true"
      Binding.Enabled = True
      Binding.Save
      WScript.Echo "enabled " + szDisplayName + " " + Binding.ID
     case "false"
      Binding.Enabled = False
      Binding.Save
      WScript.Echo "disabled " + szDisplayName + " " + Binding.ID
     end select
   end if
  next
 end if
next
end sub
'
' 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> <SinkClass> <Rule>"
WScript.echo "    /remove <Instance> <Event> <DisplayName>"
WScript.echo "    /setprop <Instance> <Event> <DisplayName> <PropertyBag> <PropertyName> "
WScript.echo "             <PropertyValue>"
WScript.echo "    /delprop <Instance> <Event> <DisplayName> <PropertyBag> <PropertyName>"
WScript.echo "    /enable <Instance> <Event> <DisplayName>"
WScript.echo "    /disable <Instance> <Event> <DisplayName>"
WScript.echo "    /enum"
WScript.echo "  arguments:"
WScript.echo "    <Instance> is the SMTP instance to work against"
WScript.echo "    <Event> can be OnArrival"
WScript.echo "    <DisplayName> is the display name of the event to edit"
WScript.echo "    <SinkClass> is the sink class for the event"
WScript.echo "    <Rule> is the rule to use for the event" 
WScript.echo "    <PropertyBag> can be Source or Sink"
WScript.echo "    <PropertyName> is the name of the property to edit"
WScript.echo "    <PropertyValue> is the value to assign to the property"
end sub

Dim iInstance
Dim szEvent
Dim szDisplayName
Dim szSinkClass
Dim szRule
Dim szPropertyBag
Dim szPropertyName
Dim szPropertyValue
dim bCheck
'
' 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
Select Case LCase(WScript.Arguments(0))
 Case "/add"
  if not WScript.Arguments.Count = 6 then
   call DisplayUsage
  else
   iInstance = WScript.Arguments(1)
   szEvent = WScript.Arguments(2)
   szDisplayName = WScript.Arguments(3)
   szSinkClass = WScript.Arguments(4)
   szRule = WScript.Arguments(5)
   call CheckSink(iInstance, szEvent, szDisplayName, bCheck)
   if bCheck = TRUE then
    call RegisterSink(iInstance, szEvent, szDisplayName, szSinkClass, szRule)
   End if
  end if
 Case "/remove"
  if not WScript.Arguments.Count = 4 then
   call DisplayUsage
  else
   iInstance = WScript.Arguments(1)
   szEvent = WScript.Arguments(2)
   szDisplayName = WScript.Arguments(3)
   call UnregisterSink(iInstance, szEvent, szDisplayName)
  end if 
 Case "/setprop"
  if not WScript.Arguments.Count = 7 then
   call DisplayUsage
  else
   iInstance = WScript.Arguments(1)
   szEvent = WScript.Arguments(2)
   szDisplayName = WScript.Arguments(3)
   szPropertyBag = WScript.Arguments(4)
   szPropertyName = WScript.Arguments(5)
   szPropertyValue = WScript.Arguments(6)
   call EditProperty(iInstance, szEvent, szDisplayName, szPropertyBag, "add", szPropertyName, szPropertyValue)
  end if
 Case "/delprop"
  if not WScript.Arguments.Count = 6 then
   call DisplayUsage
  else
   iInstance = WScript.Arguments(1)
   szEvent = WScript.Arguments(2)
   szDisplayName = WScript.Arguments(3)
   szPropertyBag = WScript.Arguments(4)
   szPropertyName = WScript.Arguments(5)
   call EditProperty(iInstance, szEvent, szDisplayName, szPropertyBag, "remove", szPropertyName, "")  
  end if
 Case "/enable"
  if not WScript.Arguments.Count = 4 then
   call DisplayUsage
  else
   iInstance = WScript.Arguments(1)
   szEvent = WScript.Arguments(2)
   szDisplayName = WScript.Arguments(3)
   call SetSinkEnabled(iInstance, szEvent, szDisplayName, "True")
  end if
 Case "/disable"
  if not WScript.Arguments.Count = 4 then
   call DisplayUsage
  else
   iInstance = WScript.Arguments(1)
   szEvent = WScript.Arguments(2)
   szDisplayName = WScript.Arguments(3)
   call SetSinkEnabled(iInstance, szEvent, szDisplayName, "False")
  end if
 Case "/enum"
  if not WScript.Arguments.Count = 1 then
   call DisplayUsage
  else
   call DisplaySinks
  end if
 Case Else
  call DisplayUsage
End Select
end if


(in reply to ebgreen)
 
 
Post #: 7
 
 RE: sink even n arriving email - 4/15/2008 4:19:42 AM   
  ebgreen


Posts: 4613
Score: 31
Joined: 7/12/2005
Status: offline
This article:

http://202.102.233.250/b2000/ASP/articles/iis/cn000320.htm

has a part that describes saving the attachments.

_____________________________

"... when you are good and crazy, oooh, oooh, oooh, the sky is the limit!" - The Tick
Goog places to start:http://www.visualbasicscript.com/m_24727/tm.htm
http://www.visualbasicscript.com/m_47117/tm.htm

(in reply to pelegk2)
 
 
Post #: 8
 
 RE: sink even n arriving email - 6/17/2008 8:48:22 PM   
  pelegk2

 

Posts: 77
Score: 0
Joined: 3/27/2005
From: Israel
Status: offline
the article helped me thanks alot!
but i couldn't find a way to how to check the file type - any idea's?

thnaks in advance
peleg

(in reply to ebgreen)
 
 
Post #: 9
 
 
 
  

If you found our site useful please link to us <a href="http://www.visualbasicscript.com">VisualBasicScript.com</a>.
All Forums >> [Scripting] >> WSH & Client Side VBScript >> sink even n arriving email Page: [1]
Jump to:





New Messages No New Messages
Hot Topic w/ New Messages Hot Topic w/o New Messages
Locked w/ New Messages Locked w/o New Messages
 Post New Thread
 Reply to Message
 Post New Poll
 Submit Vote
 Delete My Own Post
 Delete My Own Thread
 Rate Posts