有谁知道有没有办法让 Exchange server 2010 在收到某些邮箱的邮件时执行某些程序?
例如:
我有邮件 test1@example.com 和 test2@example.com
我想在邮件到达 test1@example.com 时执行 program1.exe 并在邮件到达 test2@example.com 时执行 program2.exe
我查看了 Exchange 管理控制台中的所有选项,但没有找到类似的东西。
有谁知道有没有办法让 Exchange server 2010 在收到某些邮箱的邮件时执行某些程序?
例如:
我有邮件 test1@example.com 和 test2@example.com
我想在邮件到达 test1@example.com 时执行 program1.exe 并在邮件到达 test2@example.com 时执行 program2.exe
我查看了 Exchange 管理控制台中的所有选项,但没有找到类似的东西。
我使用 EWS 和 powershell 做了类似的事情。您可以在此处下载 EWS
然后您可以在 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()
然后,为您需要监控的每个帐户运行 2 个脚本。
请参阅此处的原始示例--> Source
Exchange 没有开箱即用的方法来执行此操作。您可能希望查看在外部服务中使用 Exchange Web 服务 (EWS) 订阅来执行此操作。
我完成此操作的一种方法是使用 Outlook com 对象编写一个 powershell 脚本来扫描收件箱中的某些条件,并根据它找到的内容执行一个进程。