Agentes en Lotus Domino. Como controlar el correo entrante.

2 Flares Twitter 0 Facebook 0 LinkedIn 1 Google+ 1 2 Flares ×

Los servidores Lotus Domino tiene una magnifica herramienta para controlar o realizar tareas automáticas dentro de una Base de Datos como son los Agentes.

Los agentes son programas que se ejecutan en el Servidor Lotus Domino según una programación determinada que nosotros definamos.

Hoy vamos a ver como crear un agente en nuestra Base de Datos de correo que nos permita ver y revisar el correo que recibimos, ANTES de que llegue a nuestro buzón. Una magnífica herramienta que, entre otras cosas, nos puede permitir controlar el Spam que nos envían y desecharlo antes de que entre en nuestro correo… y nos haga perder el tiempo.

Para ello, desde el Domino Designer, abrimos el diseño de la Base de Datos de correo que estemos usando (en mi caso, mail9.ntf) y nos vamos a la pestaña de Agentes y creamos uno nuevo.

Lo primero es irnos a la pestaña inferior de propiedades e indicarle al agente cuándo se va a ejecutar, y como lo que queremos es controlar el correo que entra, le indicamos que lo haga cada vez que se recibe un correo y antes de dejarlo en la bandeja….

Agentes Lotus Domino

Luego simplemente programamos lo que queremos que haga el Agente con el mensaje que acaba de interceptar y lo primero es tener acceso al documento del mensaje, para lo que utilizaremos la propiedad documentcontext de la sesión con esta definición en LotusScript

Dim ss As New notessession
Dim doc As notesdocument
Set doc = ss.documentcontext

En este momento, en nuestra variable doc tenemos el documento de correo que acabamos de vamos a recibir, por lo que ya solo nos faltaría manipularlo a nuestro antojo.

En mi caso y como lo que pretendo es deshacerme de todos los correos molestos, me he diseñado un sistema para evitar que lleguen a la bandeja de entrada, para lo cual he creado una Base de Datos de correos donde almaceno aquellos correos que recibo y que no quiero volver a recibir.

Como medida de precaución, antes de eliminarlo creo una copia en la Base de Datos del journal de correo, por si alguna vez necesito recuperar algo que el Agente ha eliminado.

Otro detalle para controlar el Spam es evitar que el Agente haga cualquier cosa con los correos internos, es decir, si el correo ha salido desde dentro del propio servidor, no hago nada, y eso lo controlo con el siguiente código

If (Not doc.HasItem("Received") And Not doc.HasItem("SMTPOriginator")) Then
    Exit Sub
End If

 Por último, también controlo que el correo que viene de fuera venga con un emisor, es decir, controlo el campo SMTPOriginator que es donde se indica la procedencia del mensaje cuando viene de otro servidor por SMTP, y si está en blanco directamente lo elimino con el siguiente código

' Compruebo si el documento viene por SMTP con el emisor en blanco
If (doc.HasItem("SMTPOriginator") And doc.SMTPOriginator(0) = "") Then
    Call doc.copytodatabase(db3) ' copio el documento al journal
    Call doc.Remove(True)        ' borro el documento
Else

 En definitiva, con un agente que se ejecute al recibir un nuevo correo y que tome el control antes de dejarlo en la bandeja de salida podemos evitar que lleguen a nuestros buzones gran cantidad de mensajes no deseados….. o controlar otro tipo de cosas que dejo a vuestra imaginación. A continuación os dejo el Agente completo para que lo veáis. Ya únicamente quedaría actualizar el diseño de vuestro correo para que entrara en funcionamiento el control.

Option Public
Option Compare Nocase
Sub Initialize
Dim ss As New notessession
Dim db As notesdatabase
Dim db2 As notesdatabase
Dim db3 As notesdatabase
Dim docNew As notesdocument
Dim doc As notesdocument
Dim vista As notesview
Dim Clave As String, texto As String

Set db = ss.currentdatabase
Set doc = ss.documentcontext
Set db3 = ss.GetDatabase("tuServer","tujournal.nsf")

If Not(doc Is Nothing) Then
    ' Compruebo si el documento se ha generado dentro del Servidor y me salgo
    If (Not doc.HasItem("Received") And Not doc.HasItem("SMTPOriginator")) Then
        Exit Sub
    End If
    ' Compruebo si el documento viene por SMTP con el emisor en blanco y lo elimino
    If (doc.HasItem("SMTPOriginator") And doc.SMTPOriginator(0) = "") Then
        Call doc.copytodatabase(db3)
        Call doc.Remove(True)
    Else
        ' busco si el asunto está en algún mensaje de mi Base de Datos de Correo Spam
        Set db2 = ss.GetDatabase("tuServer","tuBDdeSpam.nsf")
        If  db2.IsOpen Then
            Set vista = db2.getview("Por Asunto")
            Clave = doc.Subject(0)
            Set docNew = vista.getdocumentbykey(clave,True)
            If Not docNew Is Nothing Then ' si encuentra el documento, lo elimino
                Call doc.copytodatabase(db3)
                Call doc.Remove(True)
            End If
        End if
    End If
End If
End Sub

JoBenCa

http://jobenca.es

Administrador y desarrollador de sistemas IBM System i y curioso de todo tipo de tecnología.

View more posts from this author

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

2 Flares Twitter 0 Facebook 0 LinkedIn 1 Google+ 1 2 Flares ×