• 为 Exchange 服务器编写自定义的反垃圾插件


    Exchange 2010 的 Edge Transport 包含了一些 Anti-spam 的 Feature,如图:

    image

    都开启了,但是呢,还是会有漏网之鱼,而且把这些邮件自己列为 Junk 也起不了多大作用,这些 Feature 的设置也很鸡肋,没办法设置复杂一点的规则。于是我怒了,着手自己把这些漏网之鱼挡掉。

    首先,是要找到相关的文档以及 SDK。文档入口在这里,然而里面提到的 Transport Agents SDK 的安装程序很坑,要你装个装不了的东西才给开始安装。后来发现其实可以不安装,直接从服务器上拷贝几个 DLL 和 XML 文件到本地,路径是 C:Program FilesMicrosoftExchange ServerV14Public。接着用 Visual Studio 新建一个 .Net 3.5 的 Class Library,然后添加对这几个 DLL 的引用即可。

    接下来的事情就是跟着文档的例子写(抄)一个 SmtpReceiveAgent 的架子了,然后看怎么处理 EndOfData。

    Exchange 自带的 Content Filtering 会根据内容产生几个评分,其中一个叫 SCL(Spam Confidence Level),会存到邮件头里面,并以 X-MS-Exchange-Organization-SCL 命名。当这个评分超过 5 的时候,邮件就会被认为是垃圾邮件。

    所以现在要做的就是自己扫描过邮件以后,把我的评分写到这个邮件头上面。邮件头可以通过以下方式拿到:

    var message = e.MailItem.Message;
    var headers = message.MimeDocument.RootPart.Headers;
    

    然后通过 headers.FindFirst 方法找到 SCL 对应的记录,然后改变它,如果是空的就 new 一个 TextHeaderInsertAfterLastChild 即可。

    写好后,要将编译好的 DLL 复制到服务器上安装,可以用 PowerShell 完成。安装的脚本是:

    Install-TransportAgent -Name "MySpamFilterAgent" -TransportAgentFactory "CustomSpamFilterAgent.MySpamFilterAgentFactory" -AssemblyPath "C:CustomSpamFilterAgentsCustomSpamFilterAgent.dll"
    Set-TransportAgent MySpamFilterAgent -Priority 2
    Enable-TransportAgent MySpamFilterAgent
    Restart-Service MSExchangeTransport

    卸载的脚本很简单,可以推出来。

    如果想要 debug,那么要先 Attach 到 EdgeTransport.exe,然后在外面发封测试邮件到这服务器。

    各种 Agent 的执行顺序可以在 PowerShell 用 Get-TransportPipeline | Format-List 打印出来。

  • 相关阅读:
    Build a pile of Cubes
    一键升级所有pip过期库
    AWGN
    调制详解——待完善
    BASK、BFSK、BPSK调制方法的Matlab程序实现
    tomcat运行问题解决方法
    ehcache简单使用
    MySQL 数据库中用户表中口令登陆设置
    和自己赛跑的人
    中文词频统计
  • 原文地址:https://www.cnblogs.com/Diryboy/p/How-To-Write-Exchange-TransportAgent.html
Copyright © 2020-2023  润新知