用apache james做简单的垃圾邮件过滤网关

2008-02-23 10:09:51来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

网络环境如下:
三台服务器。
1.网关,公网IP,
2.domino邮件服务器。
3.另一台服务器。
通过把网关的端口25,映射到domino服务器上,让domino服务器可以收发邮件。
同时domino服务器还要把部分邮件转发到服务器3上。
大家的发邮件smtp统一是domino服务器。
由于domino过滤垃圾邮件服务器的功能不强,并且,为了实现转发邮件,因此domino服务器被迫取消了smtp验证,
即使用open reply模式。
在这种情况下,自从服务器被人盯上用来进行垃圾邮件发送和中转之后,
给服务器的性能带来很大影响,也影响了正常邮件的收发。
Apache James是个非常优秀的邮件服务器。
由于实际情况的特殊,没有办法通过简单的配置来同时不发送垃圾邮件和正常转发邮件到domino服务器,
在察看james文档之后,通过实现mailets接口来做到了这件事情。
现在的网络配置如下。
增加一台服务器,运行james,邮件域名和domino的一致。(因为域名一致,所以无法使用james内置的forward,才需要自己来实现邮件发送功能)
修改james的配置信息,使之需要smtp验证,网关端口25映射到james服务器的25端口上。
我增加了一个james matcher。来匹配邮件并进行发送到domino服务器。
大致代码如下:
private String domain = "lizongbo.com";
public Collection match(Mail mail) throws MessagingException {
if ((mail.getSender().toString().indexOf(this.getDomain()) > 0)) {
System.out.println("收到来自" mail.getSender() "的邮件");
String path = "mailsavein/" System.currentTimeMillis()
".txt";
savemail(mail, path);
JavaMailSender jms = new JavaMailSender();
jms.sendmail(path);
}
for (Iterator i = mail.getRecipients().iterator(); i.hasNext(); ) {
MailAddress rec = (MailAddress) i.next();
if (rec.toString().indexOf(this.getDomain()) > 0) {
System.out.println( "收到" mail.getSender()
"一封发给" rec "的邮件");
String path = "mailsavein/" System.currentTimeMillis()
".txt";
savemail(mail, path);
JavaMailSender jms = new JavaMailSender();
jms.sendmail(path);
}
}
return mail.getRecipients();
}
经过配置运行,现在domino服务器无法再会被外网的人利用起来进行垃圾邮件的发送了。
这样保证了domino服务器的稳定,也省下了买专门的邮件网关的开销。
通过对james的扩展,还可以实现很多更强大的垃圾邮件过滤,杀毒过滤,与SpamAssasin结合进行垃圾邮件过滤等等。
具体可以参考:http://wiki.apache.org/james
由于james使用的开发框架avalon落后,已经被apache终止。因此james3.x版本需要大的改动和升级,期待3.0版本的出现,能够提供更强大的功能。

上一篇: 在Tomcat 配置Oracle 及DB2中创建Connection Pool
下一篇: 定义自己的Connection Pool

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:解析Java体系结构对信息安全的支持

下一篇:java程序,保存csdn blog的文章