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?😀

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,😀

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:

  • Crear un fichero “Reg.cmd” y añadir las siguientes líneas:

@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.
  • Crear el script “.vbs” (EventSinkScript.vbs) que manipule el evento correspondiente, “OnArrival” en este caso algo similar a lo siguiente:

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.

  • Crear un fichero “DesReg.cmd” para desregistrar el evento.

@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