2010-05-12 5 views
1

J'ai Exchange 2010 et j'ai besoin d'exécuter un processus utilisant des services Web contre chaque nouvel email pour entrer dans une boîte aux lettres. Le processus va essentiellement ajouter l'e-mail à une liste de tâches interne. Puis-je utiliser PowerShell pour cela?Service Web Powershell d'appel sur nouvel événement d'email (Exchange 2010)

N'ayant jamais utilisé Powershell avant que je n'ai pas vraiment la moindre idée de ses capacités.

Si non, quelqu'un peut-il suggérer une autre façon de procéder autrement que de surveiller la boîte aux lettres toutes les X secondes. Vraiment je l'aime basé sur l'événement donc si aucun nouveau courrier, puis aucun traitement.

Cheers, Mike

+0

Vous cherchez peut-être à l'exécuter sur le serveur? AFAIK, PowerShell, même Exchange Management Shell, n'aidera pas beaucoup ici. Vous devez regarder dans "Exchange Web Services Managed API", qui est une bibliothèque .NET que vous devrez appeler en utilisant PowerShell, ou C#, par exemple. J'ai besoin d'enquêter sur le type d'événement Eventing fourni par Exchange. –

Répondre

1

J'ai passé quelques jours à la recherche sur cette question et il semble qu'il est très difficile d'ajouter un code personnalisé à un événement e-mail entrant. Et beaucoup de méthodes pour le faire seront simplement ignorées si Exchange pense que cela ralentit le système de messagerie. (http://www.outlookcode.com/article.aspx?id=62)

L'autre méthode consiste à se connecter aux événements SMTP qui fonctionnent mais qui sont un peu bidouillés. Pour ce faire vous devez écrire un wscript puis l'enregistrer contre l'événement d'arrivée d'un email.

Voici un exemple de script vb pour l'ajout d'une référence hexadécimale aléatoire sur chaque e-mail envoyé via 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> 

Ensuite, pour enregistrer le script, exécutez ceci.

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" 

Pour annuler l'inscription du script, procédez comme suit;

cscript smtpreg.vbs /remove 1 onarrival SMTPAddRef 

La méthode la plus résiliente semble être de créer un système basé sur le minuteur pour vérifier les nouveaux messages toutes les X minutes.

Pas aussi lisse que j'espérais mais ça va faire.

Espérons que cela aide les autres.

Questions connexes