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

文章作者 100test 发表时间 2007:10:31 12:48:18
来源 100Test.Com百考试题网


  网络环境如下:
  三台服务器。
  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().


相关文章


Java正则表达式自义bean
在Swing的JEditorPane控件中实现超级链接的C 定义
不用编译,怎样用jb单步调试ofbiz3?
用apachejames做简单的垃圾邮件过滤网关
httpclient遇到CircularRedirectException的处理
Java实时多任务调度过程中的安全监控设计
破解ZelixKla Master的字符串加密
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛