为 Exchange 服务器编写自定义的反垃圾插件
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 服务器编写自定义的反垃圾插件的更多相关文章
- exchange 2003配置ASSP 反垃圾邮件
Exchange上第三方反垃圾邮件用得比较多的是ORF,它直接运行在虚拟SMTP服务上,配置非常的方便.ASSP(https://sourceforge.net/projects/assp/) 是一个 ...
- 在java中使用RBL服务器(中国反垃圾邮件联盟的CBL+使用)
这是06年写的,不知道现在RBL改了没,不过恢复过来做记录,以后可能需要. 实时黑名单(RBL)实际上是一个可供查询的IP地址列表,通过DNS的查询方式来查找一个IP地址的A记录是否存在来判断其是否被 ...
- Exchange2010启用反垃圾邮件功能
今天邮箱服务器发现有大量发件人为空的邮件等待执行,也就是说空邮件堵塞了队列. 一般来说,空邮件就是别人发送垃圾邮件给你,你的服务上不存在这个收件人,那么系统会产生一封退信告诉你这封邮件已经被退.而ex ...
- U-Mail反垃圾邮件网关过滤Locky勒索邮件
近期,不少朋友圈有朋友发布相关的邮件提醒,说有关于Locky病毒勒索邮件的.看来这个病毒影响不小啊!下面就说说怎么来防止Locky勒索病毒的侵扰. 什么是Locky勒索病毒 Locky勒索病毒主要以邮 ...
- Postfix上的反垃圾邮件的四个方法
在介绍如何配置Postfix的smtp配置之前有必要首先介绍一下它的背景和特点.Postfix是一个由IBM资助下由WietseVenema 负责开发的自由软件工程的一个产物,其目的是为用户提供除se ...
- postfix反垃圾邮件说明
参考地址:http://guailele.blog.51cto.com/1156442/780223 1.打开 smtp 的认证模块 在/etc/postfix/main.cf文件最后加上: sm ...
- 检查邮箱IP是否在国际反垃圾邮件组织的黑名单中
有时候邮件发不出去,很有可能就是邮件服务器的IP被国际上一些反垃圾组织列入黑名单了,这时你可以通过返回的邮件判断是否进入黑名单,或者通过以下查询地址看是否被列入,然后一个个申请移除: http://m ...
- 如何让企业邮箱更安全之gmail yahoo hotmail 反垃圾邮件机制
一.雅虎.Gmail Domainkeys 是由雅虎公司推出的一项确保电子邮件来源的真实性和内容的完整性的技术,它能让电子邮件服务商确定某封信是否真实的来自某个域和帮助他们的用户免受“钓鱼欺诈邮件“的 ...
- 用mel编写自定义节点的属性编辑器界面
用mel编写自定义节点的属性编辑器界面比较麻烦,而且网上例子又少,下面给出一个范例,说明基本的格式 // 初始化节点时调用 global proc initControl(string $attrNa ...
随机推荐
- J2EE中EL表达式
EL全名为Expression Language. EL语法很简单,主要的语法结构是${sessionScope.user.sex}所有EL都是以${为起始.以}为结尾的. 上述EL范例的意思是:从S ...
- Android PowerImageView实现,可以播放动画的强大ImageView
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100315 我个人是比较喜欢逛贴吧的,贴吧里总是会有很多搞笑的动态图片,经常看一 ...
- Qt MVC(模型-视图-代理)
实习刚才是一段时间,公司这边就要求熟悉这个mvc.一般开始都是用tableview,前面的blog我都是使用listview居多,并且相对delegate这个使用的多余model.接下来说下model ...
- 【13-Annotation】
Annotation 5个基本的Annotation •@Override •@Deprecated •@SuppressWarnings •@SafeVarargs •@FunctionalInte ...
- [LeetCode] 452 Minimum Number of Arrows to Burst Balloons
There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...
- [UCSD白板题] Changing Money
Problem Introduction In this problem,you will design an algorithm for changing money optimally. Prob ...
- 转载:JProfiler远程监控LINUX上的Tomcat过程细讲
来源于xuwanbest的博客 所谓"工欲善其事,必先利其器",好的工具确能起到事半工倍的作用.我用到的最多的就两个JConsole 和JProfiler .JConsole监 ...
- IOS XIB Cell自适应高度实现
1.代码实现Cell高度自适应的方法 通过代码来实现,需要计算每个控件的高度,之后获取一个cell的 总高度,比较常见的是通过lable的文本计算需要的高度. CGSize labelsize = [ ...
- css样式重置,不建议用通配符
由于各个浏览器对css样式的默认样式不一致,所以有必要进行样式重置.在网上看到很多建议使用 *{margin:0;padding:0} 重置margin和padding.建议不这样子使用,原因主要是性 ...
- 个人博客作业week3——案例分析
1.调研 & 评测 1.我的用户体验 win10应用版: Bug1:例句经过翻译与其给出的译文相差太多 上图是应用给出的每日一句及其译文. 将其复制入翻译,就可以看出翻译过后的句子一点也不通顺 ...