我有 Exchange 2010,我需要使用 Web 服务对进入邮箱的每封新电子邮件运行一个进程。该过程基本上会将电子邮件添加到内部任务列表中。
我可以为此使用 Powershell 吗?
在我对它的功能一无所知之前从未使用过 Powershell。
如果没有,除了每 X 秒监控一次邮箱之外,任何人都可以提出另一种方法。真的,我希望它基于事件,因此如果没有新邮件,则无需处理。
干杯,迈克
我有 Exchange 2010,我需要使用 Web 服务对进入邮箱的每封新电子邮件运行一个进程。该过程基本上会将电子邮件添加到内部任务列表中。
我可以为此使用 Powershell 吗?
在我对它的功能一无所知之前从未使用过 Powershell。
如果没有,除了每 X 秒监控一次邮箱之外,任何人都可以提出另一种方法。真的,我希望它基于事件,因此如果没有新邮件,则无需处理。
干杯,迈克
我花了几天时间研究这个问题,似乎很难将自定义代码添加到传入的电子邮件事件中。如果 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 分钟检查一次新邮件。
不像我希望的那样光滑,但它会做到的。
希望这对其他人有帮助。