Powershell在新电子邮件事件上调用Web服务(Exchange 2010)

时间:2010-05-12 14:28:40

标签: email powershell exchange-server-2010

我有Exchange 2010,我需要使用Web服务针对每个新邮件运行进程以进入邮箱。该过程基本上将电子邮件添加到内部任务列表。

我可以使用Powershell吗?

之前从未使用过Powershell,我对它的功能并不十分了解。

如果没有,除了每隔X秒监控一次邮箱外,任何人都可以提出另一种方法。真的,我喜欢它基于事件,所以如果没有新邮件,那么没有处理。

干杯, 麦克

1 个答案:

答案 0 :(得分:1)

我花了几天时间研究这个问题,似乎很难将自定义代码添加到收到的电子邮件事件中。如果Exchange认为它正在减慢电子邮件系统的速度,许多这样做的方法将被忽略。 (http://www.outlookcode.com/article.aspx?id=62

另一种方法是挂钩有效的SMTP事件但感觉有点乱。要做到这一点,你需要编写一个wscript,然后根据电子邮件的到达情况进行注册。

以下是一个示例vb脚本,用于将随机十六进制引用添加到通过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>

然后注册脚本运行它。

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"

要取消注册脚本,请执行以下操作;

cscript smtpreg.vbs /remove 1 onarrival SMTPAddRef

最具弹性的方法似乎是创建一个基于计时器的系统,每隔X分钟检查一次新邮件。

不像我希望的那样光滑,但它会做。

希望这有助于其他人。