此代码仅为示例,在代码调试过程中遇到问题,可以参考本博客的另外一篇SpamAssassin注意事项文章,也许您从中可以得到一些建议。
/**
* Copyright cn.sh.zeli
*/
package cn.sh.zeli.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.Socket;
import java.util.StringTokenizer;
import javax.mail.internet.MimeMessage;
/**
* 使用SpamAssassin进行垃圾评分,并取得相应评分值
* <PRE>
* 注意:
* 启动 spamd 守护进程时一定要设置 <font color=red>allowed-ips</font>, 是可以连接到此 spamd 实例的授权主机或网络(使用 IP 地址)的列表。
* 示例: /usr/bin/spamd --daemonize --listen-ip 0.0.0.0 --allowed-ips 192.168.1.155 --pidfile /var/run/spamd.pid
* </PRE>
*
* @author lawuu
*/
public class SpamAssassinInvoker {
/**
* 默认端口
*/
public static final int _DEFAULT_PORT = 783;
private int port = _DEFAULT_PORT;
private String host;
public SpamAssassinInvoker(String host) {
this.host = host;
}
public SpamAssassinInvoker(String host, int port) {
this.host = host;
this.port = port;
}
/**
* 扫描邮件,得到分值
* @param obj: javax.mail.internet.MimeMessage | String | ..
* @return
*/
public SpamScore scanMail(Object obj) {
Socket socket = null;
OutputStream out = null;
BufferedReader in = null;
if (null == obj || null == host) {
throw new RuntimeException("方法输入参数和host信息不能为null");
}
SpamScore ss = new SpamScore();
try {
socket = new Socket(host, port);
out = socket.getOutputStream();
in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
out.write("CHECK SPAMC/1.2\r\n\r\n".getBytes());
// pass the message to spamd
if (obj instanceof MimeMessage) {
((MimeMessage) obj).writeTo(out);
} else {
out.write(obj.toString().getBytes());
}
out.flush();
socket.shutdownOutput();
String s = null;
while (null != (s = in.readLine())) {
// System.out.println(s);
if (s.startsWith("Spam:")) {
StringTokenizer t = new StringTokenizer(s, " ");
boolean spam;
try {
t.nextToken();
spam = Boolean.valueOf(t.nextToken()).booleanValue();
} catch (Exception e) {
e.printStackTrace();
return ss;
}
t.nextToken();
// 评分值
ss.setScore(getDouble(t.nextToken()));
t.nextToken();
// 评分阈值
ss.setRequireScore(getDouble(t.nextToken()));
ss.setSpam(spam);
return ss;
}
}
return ss;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
try {
in.close();
out.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
double getDouble(String s) {
try {
return Double.parseDouble(s);
} catch (NumberFormatException e) {
return 0;
}
}
/**
* testing....
* @param args
*/
public static void main(String[] args) {
SpamAssassinInvoker sai = new SpamAssassinInvoker("192.168.1.11");
SpamScore ss = sai.scanMail("我的测萨嘎是力进噶;是;我;;发送;对方撒娇拉斯大陆福建省电力发撒旦 ");
System.out.println(ss);
}
/**
* Spam评分对象
*
* @author lawuu
*/
public class SpamScore implements Serializable {
/**
*
*/
private static final long serialVersionUID = 3111382201357553077L;
/**
* 是否垃圾邮件
*/
private boolean spam;
/**
* 计算得出的评分
*/
private double score;
/**
* 评分阈值
*/
private double requireScore;
public SpamScore() {
}
public SpamScore(boolean spam, double score, double requireScore) {
this.spam = spam;
this.score = score;
this.requireScore = requireScore;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return new StringBuffer("Spam:").append(spam)
.append(" score:").append(score)
.append(" requireScore:").append(requireScore).toString();
}
/**
* @return the spam
*/
public boolean isSpam() {
return spam;
}
/**
* @param spam the spam to set
*/
public void setSpam(boolean spam) {
this.spam = spam;
}
/**
* @return the score
*/
public double getScore() {
return score;
}
/**
* @param score the score to set
*/
public void setScore(double score) {
this.score = score;
}
/**
* @return the requireScore
*/
public double getRequireScore() {
return requireScore;
}
/**
* @param requireScore the requireScore to set
*/
public void setRequireScore(double requireScore) {
this.requireScore = requireScore;
}
}
}
分享到:
相关推荐
通过阅读 `Mail_SpamAssassin_Conf.html` 文件,你将找到更多关于 SpamAssassin 配置的详细信息和具体示例,帮助你更深入地理解和定制你的反垃圾邮件解决方案。 总的来说,SpamAssassin 是一个强大且灵活的工具,...
安装SpamAssassin通常涉及编译源代码,对于`Mail-SpamAssassin-3.2.5.tar.gz`这样的压缩包,首先需要解压,然后按照官方文档或社区提供的指南进行配置和安装。配置过程可能包括设置SMTP服务器集成、调整过滤阈值以及...
Mail_SpamAssassin_Conf中文配置
这里有四种不同的示例,可以根据实际情况选择,比如只对小于一定大小的邮件进行检查,或者使用更高效的`spamc`命令等。 配置文件的管理对于SpamAssassin的性能和效果有很大影响。不同层级的配置文件有不同的作用和...
在Linux系统上安装SpamAssassin通常可以通过包管理器进行,如在Red Hat或CentOS系统中可以使用`yum`命令: ```bash yum -y install spamassassin ``` **配置SpamAssassin** 安装完成后,你需要对SpamAssassin进行...
SpamAssassin的简单应用 SpamAssassin是一个开源的反垃圾邮件工具,能够自动地检测和过滤垃圾邮件。下面是SpamAssassin的简单应用,主要包括安装SpamAssassin、配置local.cf文件、下载中文规则集、结合qmail等步骤...
使用`sudo apt-get install spamassassin`命令可以安装SpamAssassin。这个命令会自动处理所有依赖关系,并将SpamAssassin集成到系统中。 2. **安装FuzzyOCR及其依赖**: 要安装FuzzyOCR,运行`sudo aptitude ...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
为了让邮件服务器在处理邮件时自动调用 SpamAssassin 进行扫描,通常会使用 procmail 这个邮件过滤器。在 `/etc/procmailrc` 文件中添加相应的规则,例如: 1. 所有邮件都会被扫描: ``` :0fw | /usr/bin/...
sa2dnsbl描述: 使用 spamassassin 生成 DNS 黑洞列表sa2dnsbl 包包括: sa2dnsblc.pm - 客户端,一个 SpamAssassin 模块sa2dnsbld.pl - 守护进程(由 init 运行) sa2dnsblw.pl - 工作脚本(由 cron 运行) ip2...
SpamAssassin 是一个开源的、强大的垃圾邮件过滤系统,它使用多种技术来检测和标记可能的垃圾邮件。这个“public-sa:Spamassassin规则集”是一个自定义的规则集合,旨在增强 SpamAssassin 的默认过滤效果,提高对...
姓名邮件:: SpamAssassin ::插件::: CHAOS Version: 1.1.0 Name: "Postreleasem Depression"概要用法: ifplugin Mail::SpamAssassin::Plugin::CHAOS chaos_mode Manual header JR_UNIBABBLE eval:from_lookalike_...
SpamAssassin’s lack of published documentation.SpamAssassin by Alan Schwartz, is the only published resource devoted to SpamAssassin and how to integrate it effectively into your networks....
5. **邮件过滤与管理**:服务器可以根据策略对邮件进行过滤,比如垃圾邮件过滤,这通常涉及到正则表达式匹配、关键词查找和第三方库如SpamAssassin的集成。邮件的分类、归档和删除也是邮件服务器的重要功能。 6. **...
在源代码中,你可能会看到`javax.mail`和`javax.mail.internet`这两个Java API的使用。它们是JavaMail API的一部分,提供了发送和接收电子邮件的功能。例如,`Message`类用于构建邮件对象,`Transport`类用于发送...
常规的“uri”规则可用于检测和评分被滥用的缩短服务禁用的链接,并提供 URL_BITLY_BLOCKED 作为示例。 在比赛中给这条规则打高分应该是安全的,因为经验表明,bit.ly 只会在看到一致的滥用和问题报告时阻止对 URL ...
在使用 `spamassassin_rules` 之前,你需要确保已经安装了 SpamAssassin。在大多数 Linux 发行版中,可以通过包管理器(如 apt-get 或 yum)进行安装。之后,可以按照以下步骤添加 `zabojcaspamu.pl` 的规则: 1. ...
SpamAssassin现在是Apache Software Foundation的一部分。 我们的代码,网站和邮件列表(换句话说,所有内容)现在已成为Apache SpamAssassin项目的一部分。 此处保留的所有代码都是旧的,不受支持,而不是Apache。