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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top