PowerShell Call Web Service su New Email Event (Exchange 2010)
-
26-09-2019 - |
Domanda
Ho Exchange 2010 e devo eseguire un processo utilizzando i servizi Web rispetto a ogni nuova e -mail per entrare in una cassetta postale. Il processo aggiungerà sostanzialmente l'e -mail a un elenco di attività interne.
Posso usare PowerShell per questo?
Non avevo mai usato PowerShell prima di non avere davvero idea delle sue capacità.
In caso contrario, qualcuno può suggerire un altro modo di farlo oltre al monitoraggio della cassetta postale ogni x secondi. Davvero mi piacerebbe eventi basati, quindi se nessuna nuova posta, allora nessuna elaborazione.
Saluti, Mike
Soluzione
Ho trascorso alcuni giorni a esaminare questo e sembra che sia molto difficile aggiungere codice personalizzato a un evento di posta elettronica in arrivo. E molti dei metodi per farlo verranno semplicemente ignorati se Exchange pensa che stia rallentando il sistema e -mail. (http://www.outlookcode.com/article.aspx?id=62)
L'altro metodo è quello di agganciarsi agli eventi SMTP che funziona ma sembra un po 'un hack. Per fare ciò, devi scrivere un WScript, quindi registrarlo contro l'evento di arrivo di un'e -mail.
Ecco uno script VB di esempio per l'aggiunta di un riferimento esagonale casuale su ogni e -mail che viene fornito tramite 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>
Quindi per registrare lo script esegui questo.
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"
Per cancellare lo script eseguire il seguito;
cscript smtpreg.vbs /remove 1 onarrival SMTPAddRef
Il metodo più resiliente sembra essere quello di creare un sistema basato sul timer per verificare le nuove e -mail ogni x minuti.
Non così liscio come speravo, ma lo farà.
Spero che questo aiuti gli altri.