环境:1台Exchange有2个SMTP VS.SMTP VS-1:监听25端口,外连26端口,SMTP VS-2:监听26端口,外连25端口.(由于分公司都设置了监听26端口,所以不存在通信问题,在此也不讨论SMTP通信)
需求:发往各分公司(香港,深圳)时没有免责声明,其余所有对外邮件要有免责声明.
操作:1. 将以下代码粘贴到一个新的文件中并将其另存为 EventSinkScript.vbs
<SCRIPT LANGUAGE="VBScript">
Sub ISMTPOnArrival_OnArrival(ByVal Msg, EventStatus)
TextDisclaimer = vbCrLf & "DISCLAIMER:" & vbCrLf & "Sample Disclaimer added in a VBScript."
HTMLDisclaimer = "<p></p><p>DISCLAIMER:<br>Sample Disclaimer added in a VBScript."
If Msg.HTMLBody <> "" Then
'Search for the "</body>" tag and insert our discliamer before that tag.
pos = InStr(1, Msg.HTMLBody, "</body>", vbTextCompare)
szPartI = Left(Msg.HTMLBody, pos - 1)
szPartII = Right(Msg.HTMLBody, Len(Msg.HTMLBody) - (pos - 1))
Msg.HTMLBody = szPartI + HTMLDisclaimer + szPartII
End If
If Msg.TextBody <> "" Then
Msg.TextBody = Msg.TextBody & vbCrLf & TextDisclaimer & vbCrLf
End If
'Commit the content changes to the transport ADO Stream object.
Msg.DataSource.Save ' Commit the changes into the transport Stream
pEventStatus = cdoRunNextSink
End Sub
</SCRIPT>
2.安装Exchange SDK,在命令行导航到C:\Program files\Exchange SDK\SDK\Support\CDO\Scripts
3.输入命令:cscript smtpreg.vbs /add 2(说明:2为SMTP VS-2) onarrival SMTPScriptingHost CDO.SS_SMTPOnArrivalSink “mail from=*@your-domain-here.com”
cscript smtpreg.vbs /setprop 2(同上) onarrival SMTPScriptingHost Sink ScriptName “C:\ EventSinkScript.vbs”(说明:假设放在C盘)
如要取消:cscript smtpreg.vbs /remove 2(同上) OnArrival SMTPScriptingHost
总结:至此,完成了所要达到的需求,简单讲来就是把各分公司之间的邮件和其他对外邮件分2个SMTP VS,这样只需要对SMTP VS-2(对外邮件)注册此事件来触发添加免责声明,而不会影响各分公司之间的邮件传递.
注意:由于MAPI客户发送的邮件格式不是真正的SMTP格式,所以不适用MAPI客户.如果MAPI客户需要使用免责声明,可以建立一个SMTP网关,在SMTP网关注册添加免责声明事件,所有经过此SMTP网关的外发邮件都将触发此事件,这样将能使MAPI客户也能实现此功能.
那么,如何能在一台Exchange Server上实现MAPI客户端也能添加免责声明呢?其实,只要在让一封邮件通过同一台Exchange2次即可。
相关资料: http://support.microsoft.com/kb/317680/zh-cn