James+Javamail构建邮件服务(三)

4 Mailet快速入门
  Mailet API是一个用来创建邮件处理程序的简单的API,它被配置在邮件服务器端执行,分匹配器Matcher和Mailet的接口两种,匹配器根据特定的条件匹配邮件消息,并触发相应的Mailet.
  Mailet这个词是跟Servlet相似,功能也相似,他们的共同之处都是在服务器端触发并执行,只是Servlet的Matcher通常是url的pattern,跟Servlet的接口一样,Mailet也有init()方法,service()方法和destroy()方法.即他们都有类似的生命周期. Mailet的简单可编程接口可以用来做一些邮件处理,比如反垃圾邮件,检查邮件病毒以及邮件博客等等,利用移动设备可发送email的功能,可以做到手机通过mail发送信息到邮件服务器交给Mailet处理,形成移动博客的模型.
  Mailet的运行需要mailet-2.3.jar和mailet-api-2.3.jar两个包的支持,James本身就有这两个包,可不作修改,但在开发的时候还是需要开发者自己将这两个包导入到工程的Build path中或配置到系统环境变量中。
4.1 用Mailet做一个Hello的例子
4.1.1 业务描述
  我们要实现当外部发送给James服务器中名字含hello的邮箱时,服务器在这封邮件的主题前加入“Hello”,并在服务器后台输出“Received a piece of Email”。如前所述,Mailet包括匹配器Matcher和Mailet两种接口,现在就让我们用Mailet API实现这两个接口吧。

4.1.2 编码实现

匹配器BizMatcher.java

Java代码
  1. package com.newland.james.mailet.sample1;   
  2.   
  3. import org.apache.mailet.GenericRecipientMatcher;   
  4. import org.apache.mailet.MailAddress;   
  5.   
  6. /**  
  7.  * Mailet匹配器  
  8.  * @author Chen.Feng(Kevin)<br>  
  9.  *         mail:chenfengcn@yeah.net<br>  
  10.  *         qq:67758633  
  11.  *  
  12.  */  
  13. public class BizMatcher extends GenericRecipientMatcher {   
  14.     public boolean matchRecipient(MailAddress recipient) {   
  15.         // 邮件地址必须包含hello的   
  16.         if (recipient.getUser().indexOf("hello") != -1) {   
  17.             return true;   
  18.         }   
  19.         return false;   
  20.     }   
  21. }  



BizMaillet.java

Java代码
  1. package com.newland.james.mailet.sample1;   
  2.   
  3. import java.io.IOException;   
  4. import javax.mail.MessagingException;   
  5. import javax.mail.internet.MimeMessage;   
  6. import org.apache.mailet.GenericMailet;   
  7. import org.apache.mailet.Mail;   
  8. /**  
  9.  * Mailet处理程序  
  10.  * @author Chen.Feng(Kevin)<br>  
  11.  *         mail:chenfengcn@yeah.net<br>  
  12.  *         qq:67758633  
  13.  *  
  14.  */  
  15. public class BizMaillet extends GenericMailet {   
  16.     public void init() throws MessagingException {   
  17.     }   
  18.   
  19.     public void service(Mail mail) throws MessagingException {   
  20.         MimeMessage mmp;   
  21.         mmp = (MimeMessage) mail.getMessage();   
  22.         mmp.setSubject("Hello "+mmp.getSubject());   
  23.         System.out.println("Received a piece of Email");   
  24.     }   
  25. }  



4.1.3 配置部署
  Mailet跟Servlet一样,是服务器端程序,是不能直接在客户端运行的,必须要部署到服务器端方可生效。部署具体步骤如下:
1、 将我们编写的Matcher和Mailet打包成jar文件;
2、 在/james-2.3.1/apps/james/SAR-INF目录下新建一个lib文件夹;
3、 将打包好的jar文件复制到刚刚新建的lib文件夹下;
4、 打开config.xml配置文件,找到以下这段代码:

Xml代码
  1. <mailetpackages>  
  2. <mailetpackage>org.apache.james.transport.mailets</mailetpackage>  
  3. <mailetpackage>org.apache.james.transport.mailets.smime</mailetpackage></mailetpackages>  
  4. <matcherpackages>  
  5. <matcherpackage>org.apache.james.transport.matchers</matcherpackage>  
  6. <matcherpackage>org.apache.james.transport.matchers.smime</matcherpackage></matcherpackages>  


  前半部分是用于配置Mailet包所在位置,后半部分是用于配置Matcher包所在位置,我们把我们刚编写的Mailet和Matcher所在位置配置进去就可以了。配置后的结果如下:

Xml代码
  1. <mailetpackages>  
  2. <mailetpackage>com.newland.james.mailet.sample1</mailetpackage>  
  3. <mailetpackage>org.apache.james.transport.mailets</mailetpackage>  
  4. <mailetpackage>org.apache.james.transport.mailets.smime</mailetpackage>  
  5. </mailetpackages>  
  6. <matcherpackages>  
  7. <matcherpackage>com.newland.james.mailet.sample1</matcherpackage>  
  8. <matcherpackage>org.apache.james.transport.matchers</matcherpackage>  
  9. <matcherpackage>org.apache.james.transport.matchers.smime</matcherpackage>  
  10. </matcherpackages>  


  这样就完成了包的配置。我们都知道,Mailet的工作过程是:首先由Matcher来匹配所接收到的邮件,然后提交给相应的Mailet处理,但是哪个匹配器对应哪个Mailet呢?我们还需要配置Mailet的对应关系。同样在config.xml中找到下面的代码:

Xml代码
  1. <mailet match="All" class="PostmasterAlias"/>  


  在这段代码下面加入我们自己的Mailet:

Xml代码
  1. <mailet match="All" class="PostmasterAlias"/>  

 

Xml代码
  1. <mailet match="BizMatcher" class="BizMaillet"/>  


  这样就完成了我们自定义的Mailet的配置部署工作了。重启James服务器,则此Mailet即可生效。
4.1.4 测试Mailet
  前面我们已经完成了Mailet的编码和部署工作,现在就让我们来测试一下我们的Mailet是否生效吧。首先,需要在James服务器上新建一个名称含Hello的用户。前面已介绍过新建用户的方法了,在此就不重复叙述了。
  使用adduser helloworld 881213命令新建一个helloworld用户。
  使用第三章所谈及的“使用Javamail向James的邮箱帐户发送邮件”来向helloworld@localhost发送一封邮件(当然,你同样可以使用Foxmail或Outlook向此地址发送邮件),邮件发送成功后,James服务器后台将输出“Receive a piece of email”。运行效果如下图所示:


 
  这就说明我们的Mailet已经部署成功了.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值