lunes, 28 de mayo de 2007

Event Sink - Disclaimer para Exchange

 

Muy buenas una vez más.

Durante la semana pasada he tenido que desarrollar un Disclaimer para un banco y la verdad cuando me dijeron por primera vez lo de "Event Sink", dije, "eeeeehhhhhh", ¿eso queeee  lo que eeeeeee? :-D

Pues bien, un "Event Sink" no es más que un escuchador o lo que mundialmente conocemos como "Listener" o "Trigger". Se trata de un trozo de código cuyo objetivo es añadir funcionalidad a Exchange para adaptarlo a unas necesidades específicas, para ello Exchange expone un conjunto de eventos/metódos que pueden ser redefinidos.  En mi caso me toco el evento "OnArrival", que es lanzado por Exchange cada vez que llega un correo.

Os comento todos los pasos que seguí para dar solución a mi problema. Bueno en mi caso se trataba de hacer un "Disclaimer", vamos, añadir un "Aviso Legal" al final de cada email, también tenía que añadir una imagen, pero para entender "Event Sink" bastará con la parte de texto, así se entenderá todo más facilmente.

Si alguién desea conocer como cargar una imagen y mostrarla com parte de un disclaimer que me escriba un correo y así tendré el gusto de conocerlo como de facilitarle y comentarle el ejemplo más en detalle.

Existen dos caminos para hacer un Disclaimer; por un lado, el SDK para desarrollo en "C" y por otro, un camino mucho más fácil, Visual Basic Script (vbs) y para el que no es necesario instalar ningún  entorno de desarrollo ni nada parecido, bastará con el "notepad" de toda la vida. En esta ocasión decidí optar por el camino más fácil, :-D

Antes de nada veamos que es el  CScript. Se trata de un Scripting Host para con el que registraremos y asociaremos nuestros script a Exchange. Como primer parámetro, este comando recibe SMTPReg.vbs que podéis conseguirlo aquí y que va a permitirnos realizar el trabajo duro y registrar el evento. Bastará con tenerlo en nuestro directorio de trabajo.

Pasos:

@echo on

cscript smtpreg.vbs /add 1 onarrival Display_Name_Pruebas CDO.SS_SMTPOnArrivalSink "mail from=*@pruebas.com"
cscript smtpreg.vbs /setprop 1 onarrival Display_Name_Pruebas Sink ScriptName "C:\DISCLAIMER\EventSinkScript.vbs"

pause

@echo off

Donde:

Primero, se crea el "Event Sink":

  • /add: Indica a Exchange que el evento OnArrival va a ser manipulado.
  • 1: Localizadión/orden en el que será procesado.
  • Display_Name_Pruebas: Es un nombre identificativo y único que va a permitir registrar y desregistrar cada disclaimer en un mismo servidor.
  • CDO.SS_SMTPOnArrivalSink: Especifica la clase que va a manejar el evento.
  • mail from: Es la regla que va a permitir filtrar aquellos emails a los que se aplica el evento (Identifica al campo "from" de cada email).

Segundo, se registra el "Sink"

  • /setprop 1 onarrival: Establece el valor de la propiedad del "Sink" según sus datos de creación en el punto anterior.
  • ScriptName: Nombre del scrípt que contiene la definición del evento OnArrival.

Sub ISMTPOnArrival_OnArrival(ByVal oMsg, intEventStatus)

...

If Msg.HTMLBody <> "" Then
   pos = InStr(1, Msg.HTMLBody,"</body>", vbTextCompare)
   szPartI = Left(Msg.HTMLBody, pos - 1)
   szPartII = Right(Msg.HTMLBody, Len(Msg.HTMLBody) - (pos - 1))
   Msg.HTMLBody = szPartI + HTMLDisclaimer + szPartII
End If

If Msg.TextBody <> "" then
   Msg.TextBody = Msg.TextBody & vbCrLf & TextDisclaimer & vbCrLf
End If

'Commit the content changes to the transport ADO Stream object.
Msg.DataSource.Save ' Commit the changes into the transport Stream

...

 

End sub.

@echo off

cscript smtpreg.vbs /remove 1 OnArrival SMTPScriptingHost
pause

@echo on

Os dejo aquí algunos links que os pueden facilitar más ayuda:

 

Bueno, pues nada más por ahora, una vez más espero haber servido de ayuda. 

Saludos

Juanlu


Comments:
Hola JuanLu, a mi tambien me solicitaron agregar un disclaimer, segui todos tus pasos pero al final me sale el siguiente mensaje:
Binding Display Name Specified: Display_Name_Pruebas
set property ScriptName to C:\EventSinkScript.vbs

Puedes ayudarme? te lo agradezco de antemano, mi correo es: melisoft79@yahoo.com
-Meli
 
Hola Juanlu, tienes idea de como hacer eso, pero sin tener exchange server?
 
Hola JuanLu, a mi tambien me solicitaron agregar un disclaimer, segui todos tus pasos pero al final me sale el siguiente mensaje:
Binding Display Name Specified: Display_Name_Pruebas
set property ScriptName to C:\EventSinkScript.vbs
Puedes ayudarme? te lo agradezco de antemano, mi correo es: munifrida@gmail.com
 
Hola JuanLu, a mi tambien me solicitaron agregar un disclaimer, segui todos tus pasos pero al final me sale el siguiente mensaje:
Binding Display Name Specified: Display_Name_Pruebas
set property ScriptName to C:\EventSinkScript.vbs
Puedes ayudarme? te lo agradezco de antemano, mi correo es: munifrida@gmail.com
 
Este comentario ha sido eliminado por un administrador del blog.
 
hier bin. Nein. 509 hatte darauf bestanden, er war mit roten augen waren weit bertroffen worden. Sie pre ten ein brett gegen den r cken. Bleibst du

broad
 
Este comentario ha sido eliminado por un administrador del blog.
 
Publicar un comentario



<< Home

This page is powered by Blogger. Isn't yours?