【问题标题】:Exchange 2010 - run command on mail receiveExchange 2010 - 在邮件接收上运行命令
【发布时间】:2015-11-01 08:43:43
【问题描述】:

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

例如:

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

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

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

【问题讨论】:

    标签: exchange-server


    【解决方案1】:

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

    然后您可以在 powershell 中创建一个使用 Exchange 网络服务的脚本

    这是我的脚本示例:

    $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

    【讨论】:

      【解决方案2】:

      Exchange 没有现成的方式来执行此操作。您可能希望查看在外部服务中使用 Exchange Web 服务 (EWS) 订阅来执行此操作。

      【讨论】:

      • 我查看了 EWS,可以通过它完成类似的操作。但我需要交换以启动该过程......使用 EWS 有另一方需要“ping”交换服务器并检查是否有新邮件..我需要交换以在新邮件到达时触发操作..如果没有通过执行外部程序,然后至少调用特定的 url,例如当邮件到达时 test1@example.com 调用 somesrver.com/script.php?id=1 和 test2@example.com 调用 someserver.com/script.php?id=2 谢谢,Marko
      • 您可以在进程中运行代码的唯一地方是使用传输代理。每条消息都通过传输管道,因此,您可能会编写一个代理来触发它。我会让代理通过 LPC/WCF 对盒子上的服务进行 ping 操作,而不是在进程中进行工作以限制您对传输服务本身的影响。
      【解决方案3】:

      我完成此操作的一种方法是使用 Outlook com 对象编写一个 powershell 脚本来扫描收件箱中的某些条件并根据它找到的内容执行一个进程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-29
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 2018-10-12
        • 1970-01-01
        相关资源
        最近更新 更多