Servicio web de llamadas de PowerShell en un nuevo evento de correo electrónico (Exchange 2010)
-
26-09-2019 - |
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
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.