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

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

首先,是要找到相关的文档以及 SDK。文档入口在这里,然而里面提到的 Transport Agents SDK 的安装程序很坑,要你装个装不了的东西才给开始安装。后来发现其实可以不安装,直接从服务器上拷贝几个 DLL 和 XML 文件到本地,路径是 C:\Program Files\Microsoft\Exchange Server\V14\Public。接着用 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 一个 TextHeader 并 InsertAfter 到 LastChild 即可。

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

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

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

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

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

为 Exchange 服务器编写自定义的反垃圾插件的更多相关文章

  1. exchange 2003配置ASSP 反垃圾邮件

    Exchange上第三方反垃圾邮件用得比较多的是ORF,它直接运行在虚拟SMTP服务上,配置非常的方便.ASSP(https://sourceforge.net/projects/assp/) 是一个 ...

  2. 在java中使用RBL服务器(中国反垃圾邮件联盟的CBL+使用)

    这是06年写的,不知道现在RBL改了没,不过恢复过来做记录,以后可能需要. 实时黑名单(RBL)实际上是一个可供查询的IP地址列表,通过DNS的查询方式来查找一个IP地址的A记录是否存在来判断其是否被 ...

  3. Exchange2010启用反垃圾邮件功能

    今天邮箱服务器发现有大量发件人为空的邮件等待执行,也就是说空邮件堵塞了队列. 一般来说,空邮件就是别人发送垃圾邮件给你,你的服务上不存在这个收件人,那么系统会产生一封退信告诉你这封邮件已经被退.而ex ...

  4. U-Mail反垃圾邮件网关过滤Locky勒索邮件

    近期,不少朋友圈有朋友发布相关的邮件提醒,说有关于Locky病毒勒索邮件的.看来这个病毒影响不小啊!下面就说说怎么来防止Locky勒索病毒的侵扰. 什么是Locky勒索病毒 Locky勒索病毒主要以邮 ...

  5. Postfix上的反垃圾邮件的四个方法

    在介绍如何配置Postfix的smtp配置之前有必要首先介绍一下它的背景和特点.Postfix是一个由IBM资助下由WietseVenema 负责开发的自由软件工程的一个产物,其目的是为用户提供除se ...

  6. postfix反垃圾邮件说明

    参考地址:http://guailele.blog.51cto.com/1156442/780223 1.打开 smtp 的认证模块 在/etc/postfix/main.cf文件最后加上:   sm ...

  7. 检查邮箱IP是否在国际反垃圾邮件组织的黑名单中

    有时候邮件发不出去,很有可能就是邮件服务器的IP被国际上一些反垃圾组织列入黑名单了,这时你可以通过返回的邮件判断是否进入黑名单,或者通过以下查询地址看是否被列入,然后一个个申请移除: http://m ...

  8. 如何让企业邮箱更安全之gmail yahoo hotmail 反垃圾邮件机制

    一.雅虎.Gmail Domainkeys 是由雅虎公司推出的一项确保电子邮件来源的真实性和内容的完整性的技术,它能让电子邮件服务商确定某封信是否真实的来自某个域和帮助他们的用户免受“钓鱼欺诈邮件“的 ...

  9. 用mel编写自定义节点的属性编辑器界面

    用mel编写自定义节点的属性编辑器界面比较麻烦,而且网上例子又少,下面给出一个范例,说明基本的格式 // 初始化节点时调用 global proc initControl(string $attrNa ...

随机推荐

  1. CentOS6.5 (64bit) 光盘内部FTP源

    一.启动系统,用ISO镜像挂载[root@yum ~]# mkdir -p /mnt/cdrom01[root@yum ~]# mkdir -p /mnt/cdrom02 [root@yum ~]# ...

  2. DbProviderFactory .net数据库工厂模式

    http://kb.cnblogs.com/page/72789/  工厂模式 http://www.cnblogs.com/Ruiky/archive/2012/04/19/2456784.html ...

  3. MyBatis使用动态SQL标签的小陷阱

    现在MyBatis越来越受大家的喜爱了,它的优势大家都知道,我就不多说了,直接说重点. MyBatis中提供动态SQL功能,我们可以使用<if><when><where& ...

  4. redis sentinel基本命令与参数

    1.redis基本命令1)获取sentinel的状态(1)info查看sentinel的状态(2)sentinel masters 获取sentinel中监控的所有master的节点(3)sentin ...

  5. 关于webapp的一点思考

    早上上班路上碰到发传单推广app的小MM被上司训斥,忽然想起一个问题,现在的nativeapp推广成本到底多高?能不能用浏览器访问app的方式降低这个成本. 现在很多app采用壳+web内容的方式,但 ...

  6. c++中的指针

    指针用起来是一把利器,但用得不好的童鞋 无异于 火上浇油 ,下面笔者将自己学习 的一点小小心得,与君共享 指针在类中 1.对象指针 初始化 Point a(4,5); Point *p1 = & ...

  7. DFS security warning and use group policy to set up internet security zones

    Opening a file from a DFS domain share shows a security warning while openning from the server share ...

  8. Android中NDK的搭建及简单使用 Android.mk相关介绍 JNI的使用

    Android中NDK的搭建及简单使用: 使用NDK,简述其重要步骤:.搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk ...

  9. 解决Win7下VC++6.0与Office不兼容的问题

    在Windows7下安装Visual C++ 6.0后,如果同时安装了Microsoft Office就会出现打开文件的时候出现异常,而导致VC6崩溃. 微软已经为我们解决了问题,开发出一个插件(Fi ...

  10. JS继承模式粗探

    之前提到了JS中比较简单的设计模式,在各种设计模式中被最常使用的工具之一就是原型链的继承.作为OOP的特质之一——继承,今天主要谈谈JS中比较简单的继承方法. 最基础的原型链继承在这里就不复述了,主要 ...