用于 SpamAssassin 协议的 C# 包装器
介绍一个简化与 SpamAssassin 服务器通信的类
引言
(本文之后是我的文章“在实际应用中使用ZetaSpamAssassin封装器”)
SpamAssassin 是一个开源的服务器应用程序,用于检查(电子邮件)消息是否为垃圾邮件。在本文中,我将介绍一个类,使您能够轻松地与 SpamAssassin 服务器通信,以检查给定的文本(string
)是否可能包含垃圾邮件文本。
我创建这个封装器的原因
对于我们的客户,我们提供一些 ASP(“应用程序服务提供商”)应用程序,如留言簿和讨论区,所有这些都集中托管在我们的服务器上。在上个月,客户越来越多地抱怨他们的留言簿和讨论区中存在大量垃圾邮件。
我首先想到的解决方案是实现一个 Captcha,CodeProject 上也有很好的文档。 只需搜索一下即可!
我甚至开始实现 Captcha,这时我的一个同事打断了我,并指出了一个更好的解决方案:让发布到这些留言簿和讨论区的消息由一个后台应用程序进行检查。他向我推荐了 WordPress SpamAssassin 插件,这是一个针对流行的 Weblog 应用程序 WordPress 的 PHP 脚本。
我使用这个 WordPress 插件作为我自己的实现的起点。基本上,它在后台连接到 SpamAssassin 服务器,进行一些套接字通信,以发送要检查的文本,并从 SpamAssassin 服务器接收响应,以了解它是否认为文本可能为垃圾邮件。
在进行了一些测试后,我发现了 SpamAssassin 的完整 协议规范(或某种形式),并编写了一个类来封装该协议。
SpamAssassin 协议
SpamAssassin 有几个所谓的“命令”,可以从客户端(称为“SPAMC”)发送到 SpamAssassin 服务器(称为“SPAMD”,代表“Demon”)。这些命令是
- CHECK
- SYMBOLS
- REPORT
- REPORT_IFSPAM
- SKIP
- PING
- PROCESS
- TELL
请参考 协议规范 以了解关于单个命令的详细信息。从 SPAMC 发送的每个命令都包含不同的有效载荷,具体取决于命令。SPAMD 返回的结果也取决于所使用的命令。
SpamAssassin 协议封装器
类 SpamAssassinProtocol
以易于使用的方式封装 SpamAssassin 命令。对于每个命令,都有三个元素
- 一个用于执行命令的函数。例如,
SpamAssassinProtocol.ExecuteCheck()
用于执行 CHECK 命令。 - 一个包含传递给命令函数的参数的类。例如,
SpamAssassinCheckArgs
用于传递 CHECK 命令的参数。 - 一个包含从命令函数返回的结果的类。例如,
SpamAssassinCheckArgs
用于 CHECK 命令的结果。
该类目前包含基本的封装器。可能我确实需要提供更多抽象函数和类,以使单个命令在实际场景中更易于使用。
本文顶部的下载中包含一个测试应用程序。
安装
为了在您自己的网站中使用此类,您需要满足以下要求
- Microsoft .NET Framework 2.0
- 运行中的 SpamAssassin 服务器(Linux)
请参阅我的文章“在实际应用中使用ZetaSpamAssassin封装器”,我在其中向您介绍了一个 Web 服务,该服务可以消除您自己运行 Web 服务的需求。
结论
在本文中,我简要地向您介绍了一个易于使用的类,该类封装了 SpamAssassin 协议,用于从 SPAMC 到 SPAMD 的通信。
请注意,我对 SpamAssassin 相当“不熟悉”,只知道创建该类所需的关于 SpamAssassin 的最低限度知识。所有安装和配置都是由我的同事 Rainer 完成的。因此,我可能遗漏了 SPAMD 作者在其命令中包含的一些概念。
因此,我很好奇您对该类以及您用它创建的实际应用程序的反馈,以及如何改进它。请继续发表您的评论!(只需使用下面的评论部分)
历史
- 2006-02-18:
文章的第一个版本。SpamAssassinProtocol
类包含基本的封装器,最初经过测试,可用于正常功能。当您提供更多反馈时,将需要进行更多测试和调整!
- 2006-02-18:
另请参阅我的文章“在实际应用中使用ZetaSpamAssassin封装器”