Servicio web de llamadas de PowerShell en un nuevo evento de correo electrónico (Exchange 2010)

StackOverflow https://stackoverflow.com/questions/2819735

Pregunta

Tengo Exchange 2010 y necesito ejecutar un proceso utilizando los servicios web en cada nuevo correo electrónico para llegar a un buzón. El proceso básicamente agregará el correo electrónico a una lista de tareas interna.

¿Puedo usar PowerShell para esto?

Al nunca haber usado PowerShell antes, realmente no tengo ni idea de sus capacidades.

Si no, ¿alguien puede sugerir otra forma de hacer esto más que monitorear el buzón cada x segundos? Realmente me gustaría que se basara en el evento, así que si no hay un correo nuevo, entonces no hay procesamiento.

Saludos, Mike

¿Fue útil?

Solución

He pasado unos días investigando esto y parece que es muy difícil agregar código personalizado a un evento de correo electrónico entrante. Y muchos de los métodos de hacerlo se ignorarán si Exchange cree que está ralentizando el sistema de correo electrónico. (http://www.outlookcode.com/article.aspx?id=62)

El otro método es conectarse a los eventos SMTP que funcionan pero se siente de un truco. Para hacerlo, debe escribir un WScript y luego registrar eso en caso de que la llegada de un correo electrónico.

Aquí hay un ejemplo de script VB para agregar una referencia hexagonal aleatoria en cada correo electrónico que viene a través de SMTP.

<SCRIPT LANGUAGE="VBScript">

Sub IEventIsCacheable_IsCacheable()
    'To implement the interface, and return S_OK implicitly
End Sub

Sub ISMTPOnArrival_OnArrival(ByVal Msg, EventStatus)
    Dim Flds

    randomize()

    set Flds = Msg.Fields
    With Flds
        strSubject = .Item("urn:schemas:httpmail:subject")

        if instr(strSubject, "Ref=") = 0 then
            strSubject = Replace(strSubject, CHR(9), "") & " (Ref=" & hex(replace(timer(), ".", "")) & hex(rnd()) & ")"
            .Item("urn:schemas:httpmail:subject") = strSubject
            .Update
        else
            strSubject = LEFT(strSubject, instr(strSubject, "(Ref=") - 1) & MID(strSubject, instr(instr(strsubject, "(Ref="), strSubject, ")") + 1, Len(strSubject)) & " (Ref=" & hex(replace(timer(), ".", "")) & hex(rnd()) & ")"
            .Item("urn:schemas:httpmail:subject") = strSubject
            .Update
        end if
    End With

    Msg.Datasource.Save

    EventStatus = 0 'Run next sink

End Sub

</SCRIPT>

Luego para registrar el script ejecuta esto.

Cscript smtpreg.vbs /add 1 onarrival SMTPAddRef CDO.SS_SMTPOnArrivalSink "mail from=*"
Cscript smtpreg.vbs /setprop 1 onarrival SMTPAddRef Sink ScriptName "C:\ENTERPATH\SMTPRef.vbs"

Para desanimar el script, ejecute el siguiente;

cscript smtpreg.vbs /remove 1 onarrival SMTPAddRef

El método más resistente parece ser crear un sistema basado en el temporizador para verificar si hay nuevos correos cada x minutos.

No tan resbaladizo como esperaba, pero lo hará.

Espero que esto ayude a los demás.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top