Exchange 2010 - 在邮件接收上运行命令

时间:2012-04-10 15:33:17

标签: exchange-server

有没有人知道有没有办法让Exchange Server 2010在收到某些邮箱的邮件时执行某些程序?

例如:

我有邮件test1@example.com和test2@example.com

我想在邮件到达test1@example.com时执行program1.exe 并在邮件到达test2@example.com时执行program2.exe

我查看了Exchange管理控制台中的所有选项,但没有找到类似的内容。

3 个答案:

答案 0 :(得分:3)

我使用EWS和powershell做了类似的事情。您可以下载EWS here

然后,您可以在powershell中使用Exchange Web服务创建脚本

这是我的脚本示例:

$MailboxName = "mail@domain.com"
$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()

然后,为您需要监控的每个帐户运行一个脚本。

请参阅此处的原始示例 - > Source

答案 1 :(得分:0)

Exchange没有开箱即用的方法来做到这一点。您可能希望在外部服务中使用Exchange Web服务(EWS)订阅来执行此操作。

答案 2 :(得分:0)

我实现这一目标的一种方法是使用outlook com对象编写一个powershell脚本来扫描收件箱中的某些条件,并根据它找到的内容执行一个过程。