2012-04-10 77 views

回答

0

Exchange沒有開箱即用的方式來執行此操作。您可能想要在外部服務中使用Exchange Web服務(EWS)訂閱來執行此操作。

+0

我看着EWS和類似的東西可以通過它來完成。但我需要的是交換啓動過程... 與EWS有另一方需要「ping」交換服務器,並檢查werther新郵件.. 我需要交換觸發新郵件到達時的行動。 。如果不是通過執行外部程序,則至少通過調用特定的URL 例如當郵件到達[email protected]時調用http://somesrver.com/script.php?id=1 和test2 @ example .com致電http://someserver.com/script.php?id=2 謝謝, Marko – Marko3d 2012-04-10 18:26:46

+0

您唯一可以運行代碼的地方是使用傳輸代理。每條消息都通過傳輸管道,因此,您可以編寫一個觸發此事件的代理。我會讓代理通過LPC/WCF在盒子上ping一個服務,而不是通過in-proc來限制你對傳輸服務本身的影響。 – 2012-04-11 23:22:54

0

我完成此操作的一種方法是,使用outlook com對象編寫powershell腳本來掃描收件箱中的某些條件,並根據發現的內容執行一個過程。

3

我用EWS和PowerShell做了類似的事情。您可以下載EWS here

然後您可以創建在PowerShell中的腳本,使用Exchange Web服務

這是我的腳本的例子:

$MailboxName = "[email protected]" 
$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll" 
[void][Reflection.Assembly]::LoadFile($dllpath) 
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP1) 
$service.TraceEnabled = $false 

$service.Credentials = New-Object System.Net.NetworkCredential("name","password", "domain") 
$service.Url="https://mail.yourdomain.com.au/ews/exchange.asmx" 

try{ 
$fldArray = new-object Microsoft.Exchange.WebServices.Data.FolderId[] 1 
$Inboxid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MailboxName) 
$fldArray[0] = $Inboxid 
$stmsubscription = $service.SubscribeToStreamingNotifications($fldArray, [Microsoft.Exchange.WebServices.Data.EventType]::NewMail) 
$stmConnection = new-object Microsoft.Exchange.WebServices.Data.StreamingSubscriptionConnection($service, 30); 
$stmConnection.AddSubscription($stmsubscription) 
Register-ObjectEvent -inputObject $stmConnection -eventName "OnNotificationEvent" -Action { 

    foreach($notEvent in $event.SourceEventArgs.Events){  
     [String]$itmId = $notEvent.ItemId.UniqueId.ToString() 
     $message = [Microsoft.Exchange.WebServices.Data.EmailMessage]::Bind($event.MessageData,$itmId) 
     IF ($message.Subject -eq "execprocess"){ 
      Start-Process "mybat.bat" 
     }    
    }  


} -MessageData $service 

}catch [Exception] { 
       Get-Date | Out-File C:\logs\logError.txt -Append 
       "Error : "+ $_.Exception.Message 
       } 
Register-ObjectEvent -inputObject $stmConnection -eventName "OnDisconnect" -Action {$event.MessageData.Open()} -MessageData $stmConnection 
$stmConnection.Open() 

然後,運行2個腳本一個爲每個帳戶你需要監測。

看到這裏最初的例子 - >Source

相關問題