【问题标题】:Powershell call web service on new email event (Exchange 2010)新电子邮件事件 (Exchange 2010) 上的 Powershell 调用 Web 服务
【发布时间】:2010-05-12 14:28:40
【问题描述】:

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

我可以为此使用 Powershell 吗?

在我不知道它的功能之前从未使用过 Powershell。

如果不能,任何人都可以提出另一种方法,而不是每 X 秒监控一次邮箱。真的,我希望它基于事件,所以如果没有新邮件就不会处理。

干杯, 迈克

【问题讨论】:

  • 您可能希望在服务器上运行它? AFAIK、PowerShell,甚至是 Exchange 命令行管理程序,在这里都无济于事。例如,您需要查看“Exchange Web Services Managed API”,这是一个您必须使用 PowerShell 或 C# 调用的 .NET 库。我需要调查 Exchange 提供的事件类型。

标签: email powershell exchange-server-2010


【解决方案1】:

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

另一种方法是挂钩 SMTP 事件,它有效,但感觉有点 hack。为此,您需要编写一个 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 分钟检查一次新邮件。

没有我希望的那么光滑,但它会做到的。

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2012-07-13
    • 2011-04-18
    • 2023-03-15
    • 2011-05-23
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多