`

使用SpamAssassin的java代码示例

阅读更多

此代码仅为示例,在代码调试过程中遇到问题,可以参考本博客的另外一篇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;
		}
		
		
	}

	
}
分享到:
评论

相关推荐

    SpamAssassin中文配置

    通过阅读 `Mail_SpamAssassin_Conf.html` 文件,你将找到更多关于 SpamAssassin 配置的详细信息和具体示例,帮助你更深入地理解和定制你的反垃圾邮件解决方案。 总的来说,SpamAssassin 是一个强大且灵活的工具,...

    Mail-SpamAssassin-3.2.5.tar.gz

    安装SpamAssassin通常涉及编译源代码,对于`Mail-SpamAssassin-3.2.5.tar.gz`这样的压缩包,首先需要解压,然后按照官方文档或社区提供的指南进行配置和安装。配置过程可能包括设置SMTP服务器集成、调整过滤阈值以及...

    Mail_SpamAssassin_Conf

    Mail_SpamAssassin_Conf中文配置

    linux下架设邮箱 进阶篇[spamassassin].pdf

    这里有四种不同的示例,可以根据实际情况选择,比如只对小于一定大小的邮件进行检查,或者使用更高效的`spamc`命令等。 配置文件的管理对于SpamAssassin的性能和效果有很大影响。不同层级的配置文件有不同的作用和...

    linux下spamassassin配置.docx

    在Linux系统上安装SpamAssassin通常可以通过包管理器进行,如在Red Hat或CentOS系统中可以使用`yum`命令: ```bash yum -y install spamassassin ``` **配置SpamAssassin** 安装完成后,你需要对SpamAssassin进行...

    SpamAssassin的简单应用

    SpamAssassin的简单应用 SpamAssassin是一个开源的反垃圾邮件工具,能够自动地检测和过滤垃圾邮件。下面是SpamAssassin的简单应用,主要包括安装SpamAssassin、配置local.cf文件、下载中文规则集、结合qmail等步骤...

    SpamAssassin安装[收集].pdf

    使用`sudo apt-get install spamassassin`命令可以安装SpamAssassin。这个命令会自动处理所有依赖关系,并将SpamAssassin集成到系统中。 2. **安装FuzzyOCR及其依赖**: 要安装FuzzyOCR,运行`sudo aptitude ...

    spamassassin-3.4.4-4.el8.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    linux下架设邮箱进阶篇[spamassassin]扫描.pdf

    为了让邮件服务器在处理邮件时自动调用 SpamAssassin 进行扫描,通常会使用 procmail 这个邮件过滤器。在 `/etc/procmailrc` 文件中添加相应的规则,例如: 1. 所有邮件都会被扫描: ``` :0fw | /usr/bin/...

    sa2dnsbl:使用 spamassassin 生成 DNS 黑洞列表

    sa2dnsbl描述: 使用 spamassassin 生成 DNS 黑洞列表sa2dnsbl 包包括: sa2dnsblc.pm - 客户端,一个 SpamAssassin 模块sa2dnsbld.pl - 守护进程(由 init 运行) sa2dnsblw.pl - 工作脚本(由 cron 运行) ip2...

    public-sa:Spamassassin规则集

    SpamAssassin 是一个开源的、强大的垃圾邮件过滤系统,它使用多种技术来检测和标记可能的垃圾邮件。这个“public-sa:Spamassassin规则集”是一个自定义的规则集合,旨在增强 SpamAssassin 的默认过滤效果,提高对...

    CHAOS:SpamAssassin的PERL插件模块

    姓名邮件:: SpamAssassin ::插件::: CHAOS Version: 1.1.0 Name: "Postreleasem Depression"概要用法: ifplugin Mail::SpamAssassin::Plugin::CHAOS chaos_mode Manual header JR_UNIBABBLE eval:from_lookalike_...

    英文原版-SpamAssassin 1st Edition

    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....

    邮件服务器java

    5. **邮件过滤与管理**:服务器可以根据策略对邮件进行过滤,比如垃圾邮件过滤,这通常涉及到正则表达式匹配、关键词查找和第三方库如SpamAssassin的集成。邮件的分类、归档和删除也是邮件服务器的重要功能。 6. **...

    基于Java的邮件服务器源程序.zip

    在源代码中,你可能会看到`javax.mail`和`javax.mail.internet`这两个Java API的使用。它们是JavaMail API的一部分,提供了发送和接收电子邮件的功能。例如,`Message`类用于构建邮件对象,`Transport`类用于发送...

    DecodeShortURLs:SpamAssassin DecodeShortURLs 插件库

    常规的“uri”规则可用于检测和评分被滥用的缩短服务禁用的链接,并提供 URL_BITLY_BLOCKED 作为示例。 在比赛中给这条规则打高分应该是安全的,因为经验表明,bit.ly 只会在看到一致的滥用和问题报告时阻止对 URL ...

    spamassassin_rules:zabojcaspamu.pl 网站的规则列表

    在使用 `spamassassin_rules` 之前,你需要确保已经安装了 SpamAssassin。在大多数 Linux 发行版中,可以通过包管理器(如 apt-get 或 yum)进行安装。之后,可以按照以下步骤添加 `zabojcaspamu.pl` 的规则: 1. ...

    SpamAssassin-开源

    SpamAssassin现在是Apache Software Foundation的一部分。 我们的代码,网站和邮件列表(换句话说,所有内容)现在已成为Apache SpamAssassin项目的一部分。 此处保留的所有代码都是旧的,不受支持,而不是Apache。

Global site tag (gtag.js) - Google Analytics