`
chenfengcn
  • 浏览: 118389 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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


package com.newland.james.mailet.sample1;

import org.apache.mailet.GenericRecipientMatcher;
import org.apache.mailet.MailAddress;

/**
 * Mailet匹配器
 * @author Chen.Feng(Kevin)<br>
 *         mail:chenfengcn@yeah.net<br>
 *         qq:67758633
 *
 */
public class BizMatcher extends GenericRecipientMatcher {
	public boolean matchRecipient(MailAddress recipient) {
		// 邮件地址必须包含hello的
		if (recipient.getUser().indexOf("hello") != -1) {
			return true;
		}
		return false;
	}
}


BizMaillet.java

package com.newland.james.mailet.sample1;

import java.io.IOException;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.apache.mailet.GenericMailet;
import org.apache.mailet.Mail;
/**
 * Mailet处理程序
 * @author Chen.Feng(Kevin)<br>
 *         mail:chenfengcn@yeah.net<br>
 *         qq:67758633
 *
 */
public class BizMaillet extends GenericMailet {
	public void init() throws MessagingException {
	}

	public void service(Mail mail) throws MessagingException {
		MimeMessage mmp;
		mmp = (MimeMessage) mail.getMessage();
		mmp.setSubject("Hello "+mmp.getSubject());
		System.out.println("Received a piece of Email");
	}
}


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配置文件,找到以下这段代码:

<mailetpackages>
<mailetpackage>org.apache.james.transport.mailets</mailetpackage>
<mailetpackage>org.apache.james.transport.mailets.smime</mailetpackage></mailetpackages>
<matcherpackages>
<matcherpackage>org.apache.james.transport.matchers</matcherpackage>
<matcherpackage>org.apache.james.transport.matchers.smime</matcherpackage></matcherpackages>

  前半部分是用于配置Mailet包所在位置,后半部分是用于配置Matcher包所在位置,我们把我们刚编写的Mailet和Matcher所在位置配置进去就可以了。配置后的结果如下:
<mailetpackages>
<mailetpackage>com.newland.james.mailet.sample1</mailetpackage>
<mailetpackage>org.apache.james.transport.mailets</mailetpackage>
<mailetpackage>org.apache.james.transport.mailets.smime</mailetpackage>
</mailetpackages>
<matcherpackages>
<matcherpackage>com.newland.james.mailet.sample1</matcherpackage>
<matcherpackage>org.apache.james.transport.matchers</matcherpackage>
<matcherpackage>org.apache.james.transport.matchers.smime</matcherpackage>
</matcherpackages>

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

  在这段代码下面加入我们自己的Mailet:
<mailet match="All" class="PostmasterAlias"/>

<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已经部署成功了.
分享到:
评论
1 楼 zhangyi462002 2012-08-08  
仁兄, 我照着你的代码走下来,为什么启动的时候,就是找不到BizMatcher这个类呢?是我打包的方式不对,还是怎么的。我把log的文件贴出来

java.lang.ClassNotFoundException: Requested matcher not found: BizMatcher.  looked in [, com.cqut., org.apache.james.transport.matchers., org.apache.james.transport.matchers.smime.]).).
org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleException: Component named "spoolmanager" failed to pass through the Starting stage. (Reason: org.apache.mailet.MailetException: Could not load matcher (BizMatcher);
  nested exception is:
java.lang.ClassNotFoundException: Requested matcher not found: BizMatcher.  looked in [, com.cqut., org.apache.james.transport.matchers., org.apache.james.transport.matchers.smime.]).
at org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleHelper.fail(LifecycleHelper.java:354)
at org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleHelper.startup(LifecycleHelper.java:226)
at org.apache.avalon.phoenix.components.application.DefaultApplication.startup(DefaultApplication.java:530)
at org.apache.avalon.phoenix.components.application.DefaultApplication.doRunPhase(DefaultApplication.java:478)
at org.apache.avalon.phoenix.components.application.DefaultApplication.runPhase(DefaultApplication.java:409)
rethrown from
org.apache.mailet.MailetException: Could not load matcher (BizMatcher);
  nested exception is:
java.lang.ClassNotFoundException: Requested matcher not found: BizMatcher.  looked in [, com.cqut., org.apache.james.transport.matchers., org.apache.james.transport.matchers.smime.]
at org.apache.james.transport.JamesMatcherLoader.getMatcher(JamesMatcherLoader.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
rethrown from
java.lang.ClassNotFoundException: Requested matcher not found: BizMatcher.  looked in [, com.cqut., org.apache.james.transport.matchers., org.apache.james.transport.matchers.smime.]
at org.apache.james.transport.JamesMatcherLoader.getMatcher(JamesMatcherLoader.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134)
at $Proxy11.getMatcher(Unknown Source)
INFO    2012-08-08 22:49:41.465 [Phoenix.] (): exception while starting:Component named "spoolmanager" failed to pass through the Starting stage. (Reason: org.apache.mailet.MailetException: Could not load matcher (BizMatcher);
  nested exception is:
java.lang.ClassNotFoundException: Requested matcher not found: BizMatcher.  looked in [, com.cqut., org.apache.james.transport.matchers., org.apache.james.transport.matchers.smime.]).

相关推荐

    James+Javamail构建邮件服务

    ### James+Javamail构建邮件服务 #### 关于James与Javamail ##### Apache James Apache James(Java Apache Mail Enterprise Server)是Apache组织的一个子项目,它完全基于Java技术开发,支持多种邮件相关协议,...

    James+Javamail构建邮件服务.doc

    James+Javamail构建邮件服务

    james+Javamail构建邮件服务

    james+Javamail构建邮件服务有例子,有详解

    james_javamail邮件服务学习

    JavaMail邮件服务是Java开发中用于发送和接收电子邮件的标准库,它基于SMTP(Simple Mail Transfer Protocol)和...同时,掌握这些知识点对于开发企业级应用、构建邮件通知系统或实现自动化邮件处理都是非常重要的。

    关于JavaMail和James邮件基础

    JavaMail和James是两个在Java环境中处理电子邮件的关键组件。JavaMail是一个开源库,它提供了用于发送、接收和操作电子邮件的标准API。而James(Apache James)则是一个完整的邮件服务器,它支持SMTP、POP3和IMAP...

    JAVAMail邮箱服务器搭建步骤详解

    Apache James是基于Java开发的一款开源邮件服务器,它集成了POP3、SMTP等常见的邮件协议,为企业和学习者提供了构建邮件服务器的便利。本文将详细介绍如何在Linux环境下搭建JavaMail邮箱服务器Apache James。 **...

    James邮件服务器

    此外,James可以与其他Apache项目(如Tomcat、Cassandra等)集成,构建更复杂的邮件解决方案。 总的来说,James邮件服务器是一个强大且灵活的开源邮件平台,适用于从小型企业到大型企业的各种规模的组织。其强大的...

    邮件服务器 Java写的源代码 SMTP+POP3

    1. 使用JavaMail发送邮件:通过`javax.mail.Session`、`javax.mail.Transport`和`javax.mail.internet.MimeMessage`等类,可以构建SMTP客户端,设置发件人、收件人、主题和正文,然后通过Transport.send()方法发送...

    JavaMail-1.5 API

    根据提供的文件描述部分,JavaMail API不仅仅能够执行一些简单的邮件传输任务,它还能被用来构建功能丰富的邮件客户端应用,类似于Microsoft Outlook。这意味着,JavaMail API可以用来实现从创建邮件、添加附件、...

    james_mail邮件系统(SSH)

    James_Mail 是一款基于Java开发的B/S模式的电子邮件系统,它提供了一种高效、安全且易于管理的方式来处理电子邮件服务。在这个系统中,用户可以通过Web浏览器进行邮件的收发、管理,极大地提高了工作效率。 ### 一...

    javamail 工程实例

    在结合James服务器使用时,JavaMail可以作为应用程序与邮件服务器交互的桥梁。 在JavaMail工程实例中,我们通常会涉及到以下几个关键知识点: 1. **JavaMail API**: JavaMail API 包含了一系列的接口和类,如`...

    纯Java的一个邮件服务器

    在Java开发领域,构建一个邮件服务器是一项重要的技术实践,这不仅可以用于学习JavaMail API的使用,也可以在实际项目中提供邮件发送和接收服务。本项目是基于纯Java实现的一个邮件服务器,名为James,版本为2.3.1。...

    基于Java的邮件服务器

    ### 基于Java的邮件服务器构建指南 #### 一、引言 本文将详细介绍如何构建一个基于Java的邮件服务器,特别适用于初学者以及资源有限的学习者。文章将涵盖整个搭建过程中的关键技术点,包括Apache James 3.0 的安装...

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

    JavaMail包括`Session`(设置邮件服务器的配置信息)、`Message`(表示邮件对象)、`Address`(表示邮件地址)等核心组件,使开发者能够轻松地构建邮件客户端或服务器端应用。 5. MIME(Multipurpose Internet Mail...

    mailServer Apache James / sendmail / qmail

    Apache James是一个完全由Java编写的邮件服务器,它提供了邮件存储、POP3、IMAP4、SMTP协议的支持,并且具有可扩展性,允许开发者通过JavaMail API自定义功能。James还包含了邮件列表、地址簿和Web管理界面等特性,...

    基于JAVA开发的邮件服务器

    在Java中,我们可以使用开源项目如James、JAMES Server或Apache MINA来构建这样的系统。 4. 安全性:邮件服务器需要确保通信的安全性,通常采用SSL/TLS进行加密,防止数据在传输过程中被截获。开发者需配置服务器...

    java版电子邮件系统

    Java版电子邮件系统可能使用Java实现自己的邮件服务器,或者利用开源项目如James、JAMES Server或Apache MINA来搭建。 3. 数据存储:邮件系统需要存储用户的账号信息、邮件内容以及邮件元数据。这通常涉及数据库...

Global site tag (gtag.js) - Google Analytics