JamesJavamail构建邮件服务实现_第1页
JamesJavamail构建邮件服务实现_第2页
JamesJavamail构建邮件服务实现_第3页
JamesJavamail构建邮件服务实现_第4页
JamesJavamail构建邮件服务实现_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、James+Javamail构建邮件服务(一)关键字: james James+Javamail构建邮件服务 本文描述如何使用James搭建具备一定邮件过滤、邮件操作功能的邮件服务器,以及使用Javamail实现对James服务器邮件的收发功能。 1关于James与Javamail Apache James(Java Apache Mail Enterprise Server)是Apache组织的子项目之一,完全采用纯Java技术开发,实现了SMTP、POP3与NNTP等多种邮件相关协议。James是一个邮件应用平台,可以通过Mailet扩充其功能,如Mail2SMS、Mail2Fax等。Ja

2、mes提供了比较完善的配置方案,尤其是关于邮件内容存储和用户信息存储部分,可以选择在文件、数据库或其他介质中保存。James性能稳定、可配置性强,还是开源项目,所有源代码不存在版权问题,因此,James在项目中的应用日益广泛。 Javamail API是一个用于阅读、编写和发送电子消息的可选包(标准扩展),可以用来建立基于标准的电子邮件客户机,它支持各种因特网邮件协议,包括:SMTP、POP、IMAP、MIME、NNTP、S/MIME及其它协议。 在本文档中,我们使用James 2.3.1Javamail 1.4.1作为介绍蓝本。 2 James服务器快速入门 我们可以从Apache Jame

3、s的官方站点下载到我们所需要的James服务器及源码 James服务器(ZIP版)下载地址: HYPERLINK /james/server/binaries/james-binary-2.3.1.zip /james/server/binaries/james-binary-2.3.1.zip James源码下载地址: HYPERLINK /james/server/source/james-2.3.1-src.zip /james/server/source/james-2.3.1-src.zip 其他版本的服务器及源码可到官方下载页面下载: HYPERLINK /download.cgi

4、 /download.cgi 2.1启动James 第一步: 将james-binary-2.3.1.zip解压到纯英文目录下 第二步: 运行bin目录下的run.bat(在运行之前请确保您的Java环境变量已配置成功,否则将提示运行失败) 显示以下内容表示James服务器已启动成功: 服务器启动成功后,将自动在apps目录下根据james.sar文件生成相应的James发布文件包,我们后面讨论的配置文件config.xml即存在于此发布文件包中。 2.2用Telnet管理用户 用cmd进入MS-DOS,输入telnet localhost 4555 (注:localhost是邮件服务器名,4

5、555是管理端口,可在appsjamesSAR-INFconfig.xml文件中配置,在此我们使用其默认配置) 然后输入用户名和密码(在配置文件config.xml中,默认为用户名:root密码:root) 出现如下信息说明登陆成功: 登陆成功后,我们就可以开始对用户信息进行增、删、查、改等操作了。 常用的用户信息操作命令参见下表: ? Currently implemented commands: 常用实现命令 ? help display this help 显示帮助信息 ? listusers display existing accounts 显示现有账户 ? countusers d

6、isplay the number of existing accounts显示现有账户数量 ? adduser username password add a new user 添加一个新用户 ? verify username verify if specified user exist 核实指定用户是否存在 ? deluser username delete existing user 删除存在的用户 ? setpassword username password sets a users password 设置用户密码 ? setalias user alias locally for

7、wards all email for user to alias 设置邮箱别名 ? showalias username shows a users current email alias显示别名 ? unsetalias user unsets an alias for user 删除用户别名 ? setforwarding username emailaddress forwards a users email to another email address 转发用户的电子邮件地址到另一个电子邮件地址 ? showforwarding username shows a users cu

8、rrent email forwarding显示用户的当前邮件转发 ? unsetforwarding username removes a forward 删除转发 ? user repositoryname change to another user repository 改变另一个用户库 ? shutdown kills the current JVM (convenient when James is run as a daemon) 关闭当前的服务 ? quit close connection 关闭连接 我们可以输入命令:adduser chenfengcn 881213来添加一

9、个的邮件用户,则其用户名为:chenfengcn,密码为:881213,邮箱地址为:chenfengcnlocalhost(用户名后的域名跟服务器配置的域名相同,在config.xml文件中配置,我们将在后面部分讨论如何配置邮件服务器域名)。这样,我们就完成了一个最简单的邮件服务器的搭建操作。下面就让我们使用Foxmail来测试一下我们的邮箱帐户是否真正可以使用吧。 2.3使用Foxmail测试邮箱帐户 打开Foxmail,点击“邮箱”“新建邮箱帐户” 电子邮件地址:chenfengcnlocalhost 密码为:881213 POP3服务器:localhost SMTP服务器:localho

10、st 其余选项均使用默认即可,新建完成后,Foxmail将发送一测试邮件到我们新建的邮箱里,点击“收取”,即可收取我们邮件帐户里面的邮件了。当收到Foxmail发送的测试邮件,就说明我们的邮件帐户可以正常使用了。 作为程序设计人员,我们当然希望能使用自己写的程序来测试我们的邮件服务器是否搭建成功,而不是Foxmail。下面就让我们用Javamail来实现这一切吧。James+Javamail构建邮件服务(二) HYPERLINK /blog/#m=0&t=1&c=fks_087069083086088066086083083095085085082069083081087070084 l m=

11、0&t=1&c=fks_087069083086088066086083083095085085082069083081087070084 电子邮件开发2009-11-30 10:15:30阅读21评论0字号:大中小 3 Javamail快速入门 进行Javamail开发需要用到两个包:mail.jar和activation.jar,在开始Javamail编程之前,请自己将这两个包添加到IDE的Build path中或将这两个包的路径配置到环境变量中。 3.1使用Javamail向James的邮箱帐户发送邮件 3.1.1业务描述 本例将使用Javamail实现邮件的发送功能。发送邮件需要配置邮

12、件服务器属性信息,配置邮件接收地址,使用SMTP认证获得会话(Session),构建邮件体(MimeMessage),发送邮件。具体编码如下: 3.1.2编码实现 发送邮件需要两个类:一个是SMTP用户身份认证类(James在默认情况下,是需要SMTP身份认证的);另一个就是我们的邮件发送类,为简单起见,我们直接将邮件的相关信息,如:标题、内容、发送者、接收者等信息直接写在类中,运行main()函数即发送。当然,你同样可以为自己的邮件发送系统构造一个邮件发送介面,通过Servlet将相关参数传递至后台进行处理与发送。其主要代码也就是此main()函数中的内容,故不赘述。 SmtpAuth.ja

13、va用户身份认证代码Java代码 packagecom.newland.javamail.sample1; /* *用于身份认证 *authorChen.Feng(Kevin) *mail:chenfengcn *qq:67758633 */ classSmtpAuthextendsjavax.mail.Authenticator privateStringuser,password; /* * *paramgetuser *paramgetpassword */ publicvoidsetUserinfo(Stringgetuser,Stringgetpassword) user=getus

14、er; password=getpassword; protectedjavax.mail.PasswordAuthenticationgetPasswordAuthentication() returnnewjavax.mail.PasswordAuthentication(user,password); publicStringgetPassword() returnpassword; publicvoidsetPassword(Stringpassword) this.password=password; publicStringgetUser() returnuser; publicv

15、oidsetUser(Stringuser) this.user=user; SendMail.java发送邮件代码Java代码 packagecom.newland.javamail.sample1; importjava.util.Properties; importjavax.activation.DataHandler; importjavax.activation.DataSource; importjavax.activation.FileDataSource; importjavax.mail.Message; importjavax.mail.MessagingExceptio

16、n; importjavax.mail.Session; importjavax.mail.Transport; importjavax.mail.URLName; importernet.AddressException; importernet.InternetAddress; importernet.MimeBodyPart; importernet.MimeMessage; importernet.MimeMultipart; /* *使用Javamail实现邮件发送功能 *authorChen.Feng(Kevin) *mail:chenfengcn *qq:67758633 * *

17、/ publicclassSendMail publicSendMail() /TODOAuto-generatedconstructorstub publicstaticvoidmain(Stringargs) /初始化信息 Stringsender=“chenfengcn”; Stringpassword=“881213”; StringsmtpServer=“localhost”; Stringrecipient=“chenfengcnlocalhost”; Stringsubject=“测试邮件主题”; StringfileAttachment=“”;/附件 Stringcontent

18、=“测试邮件内容”; /配置服务器属性 Propertiesproper=newProperties(); proper.put(“mail.smtp.host”,smtpServer);/smtp服务器 proper.put(“mail.smtp.auth”,“true”);/是否smtp认证 proper.put(“mail.smtp.port”,“25”);/设置smtp端口 proper.put(“tocol”,“smtp”);/发邮件协议 proper.put(“tocol”,“pop3”);/收邮件协议 /配置邮件接收地址 InternetAddressreceiveAddress

19、=newInternetAddress1; try receiveAddress0=newInternetAddress(recipient); catch(AddressExceptione) /TODOAuto-generatedcatchblock e.printStackTrace(); /smtp认证,获取Session SmtpAuthsa=newSmtpAuth(); sa.setUserinfo(sender,password); Sessionsession=Session.getInstance(proper,sa); session.setPasswordAuthenti

20、cation(newURLName(smtpServer),sa .getPasswordAuthentication(); /构建邮件体 MimeMessagesendMess=newMimeMessage(session); MimeBodyPartmbp=newMimeBodyPart(); MimeMultipartmmp=newMimeMultipart(); try /邮件文本内容 mbp.setContent(content,“text/plain;charset=GBK”); mmp.addBodyPart(mbp); /附件处理 if(fileAttachment!=null

21、&fileAttachment!=”) DataSourcesource=newFileDataSource(fileAttachment); Stringname=source.getName(); mbp=newMimeBodyPart(); mbp.setDataHandler(newDataHandler(source); mbp.setFileName(name); mmp.addBodyPart(mbp); /邮件整体 sendMess.setSubject(subject); sendMess.setContent(mmp); /发送邮件 sendMess.setFrom(new

22、InternetAddress(sender); sendMess.setRecipients(Message.RecipientType.TO,receiveAddress); Transport.send(sendMess); System.out.println(“发送成功”); catch(MessagingExceptionex) ex.printStackTrace(); 值得一提的是,本程序已经实现了带附件邮件的发送功能,如果要发送带附件的邮件,则只需要将附件的路径传到fileAttachment变量中就可以了。邮件发送成功后,程序将在后台打印出“发送成功”,这样我们就完成了邮件

23、发送功能。那么,我们应该如何检验服务器是否确实收到我们发送的测试邮件呢?Javamail可以发送邮件,当然也能接收邮件啦,下面让我们一起使用Javamail编写邮件接收功能来检验吧。 3.2使用Javamail接收邮件 3.2.1业务描述 在上一节,我们已经向James的chenfengcn用户发送了一封测试邮件,我们应该如何使用Javamail来收取这封邮件呢? 为读取邮件,必须首先设置服务器属性(Properties),获取一个会话(Session),然后获取并连接邮箱所在的存储器(Store对象),打开该用户的邮箱(Folder),获取所希望阅读的消息,最后关闭目录和连接。 下面的程序实

24、现了接收chenfengcnlocalhost邮箱中所有邮件,并将发送人和主题打印出来。 3.2.2编码实现 Java代码 packagecom.newland.javamail.sample1; importjava.util.Properties; importjavax.mail.Folder; importjavax.mail.Message; importjavax.mail.MessagingException; importjavax.mail.NoSuchProviderException; importjavax.mail.Session; importjavax.mail.

25、Store; /* *使用Javamail实现邮件接收功能 *authorChen.Feng(Kevin) *mail:chenfengcn *qq:67758633 * */ publicclassReceiveMail publicReceiveMail() publicstaticvoidmain(Stringargs) /初始化主机 Stringhost=“localhost”; Stringusername=“chenfengcn”; Stringpassword=“881213”; /配置服务器属性 Propertiesprops=newProperties(); props.pu

26、t(“mail.smtp.host”,“localhost”);/smtp服务器 props.put(“mail.smtp.auth”,“true”);/是否smtp认证 props.put(“mail.smtp.port”,“25”);/设置smtp端口 props.put(“tocol”,“smtp”);/发邮件协议 props.put(“tocol”,“pop3”);/收邮件协议 /获取会话 Sessionsession=Session.getDefaultInstance(props,null); /获取Store对象,使用POP3协议,也可能使用IMAP协议 try Storesto

27、re=session.getStore(“pop3”); /连接到邮件服务器 store.connect(host,username,password); /获取该用户Folder对象,并以只读方式打开 Folderfolder=store.getFolder(“inbox”); folder.open(Folder.READ_ONLY); /检索所有邮件,按需填充 Messagemessage=folder.getMessages(); for(inti=0;imessage.length;i+) /打印出每个邮件的发件人和主题 System.out.println(i+“:”+messag

28、ei.getFrom()0+“t” +messagei.getSubject(); folder.close(false); store.close(); catch(NoSuchProviderExceptione) /TODOAuto-generatedcatchblock e.printStackTrace(); catch(MessagingExceptione) /TODOAuto-generatedcatchblock e.printStackTrace(); 程序运行成功后,将会把chenfengcn用户的邮件从James服务器中取出,并将此邮箱中所有邮件的发件人、主题打印在后台

29、。若要打印该邮件的内容等信息,则只要将messagei对象中的邮件内容等信息读取出来就可以了。 注:鉴于邮件的存储结构(将在第五章介绍),读取邮件附件是一个比较复杂的过程,因为邮件的文本内容和附件信息都是保存在BodyPart对象中的,BodyPart用于标识类型的标记不明确,造成对附件的判断较为复杂。对于附件的操作本人将在今后的改进版本中加以介绍。James+Javamail构建邮件服务(三) HYPERLINK /blog/#m=0&t=1&c=fks_087069083086088066086083083095085085082069083081087070084 l m=0&t=1&c

30、=fks_087069083086088066086083083095085085082069083081087070084 电子邮件开发 2009-11-30 10:17:09 阅读30 评论0 字号:大中小 4 Mailet快速入门 Mailet API是一个用来创建邮件处理程序的简单的API,它被配置在邮件服务器端执行,分匹配器Matcher和Mailet的接口两种,匹配器根据特定的条件匹配邮件消息,并触发相应的Mailet. Mailet这个词是跟Servlet相似,功能也相似,他们的共同之处都是在服务器端触发并执行,只是Servlet的Matcher通常是url的pattern,跟S

31、ervlet的接口一样,Mailet也有init()方法,service()方法和destroy()方法.即他们都有类似的生命周期. Mailet的简单可编程接口可以用来做一些邮件处理,比如反垃圾邮件,检查邮件病毒以及邮件博客等等,利用移动设备可发送email的功能,可以做到手机通过mail发送信息到邮件服务器交给Mailet处理,形成移动博客的模型. Mailet的运行需要mailet-2.3.jar和mailet-api-2.3.jar两个包的支持,James本身就有这两个包,可不作修改,但在开发的时候还是需要开发者自己将这两个包导入到工程的Build path中或配置到系统环境变量中。

32、4.1 用Mailet做一个Hello的例子 4.1.1 业务描述 我们要实现当外部发送给James服务器中名字含hello的邮箱时,服务器在这封邮件的主题前加入“Hello”,并在服务器后台输出“Received a piece of Email”。如前所述,Mailet包括匹配器Matcher和Mailet两种接口,现在就让我们用MailetAPI实现这两个接口吧。 4.1.2 编码实现 匹配器BizMatcher.java Java代码 packagecom.newland.james.mailet.sample1; importorg.apache.mailet.GenericReci

33、pientMatcher; importorg.apache.mailet.MailAddress; /* *Mailet匹配器 *authorChen.Feng(Kevin) *mail:chenfengcn *qq:67758633 * */ publicclassBizMatcherextendsGenericRecipientMatcher publicbooleanmatchRecipient(MailAddressrecipient) /邮件地址必须包含hello的 if(recipient.getUser().indexOf(hello)!=-1) returntrue; ret

34、urnfalse; BizMaillet.javaJava代码 packagecom.newland.james.mailet.sample1; importjava.io.IOException; importjavax.mail.MessagingException; importernet.MimeMessage; importorg.apache.mailet.GenericMailet; importorg.apache.mailet.Mail; /* *Mailet处理程序 *authorChen.Feng(Kevin) *mail:chenfengcn *qq:67758633

35、* */ publicclassBizMailletextendsGenericMailet publicvoidinit()throwsMessagingException publicvoidservice(Mailmail)throwsMessagingException MimeMessagemmp; mmp=(MimeMessage)mail.getMessage(); mmp.setSubject(Hello+mmp.getSubject(); System.out.println(ReceivedapieceofEmail); 4.1.3 配置部署 Mailet跟Servlet一

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

37、ers org.apache.james.transport.matchers.smime前半部分是用于配置Mailet包所在位置,后半部分是用于配置Matcher包所在位置,我们把我们刚编写的Mailet和Matcher所在位置配置进去就可以了。配置后的结果如下:Xml代码 com.newland.james.mailet.sample1 org.apache.james.transport.mailets org.apache.james.transport.mailets.smime com.newland.james.mailet.sample1 org.apache.james.tr

38、ansport.matchers org.apache.james.transport.matchers.smime 这样就完成了包的配置。我们都知道,Mailet的工作过程是:首先由Matcher来匹配所接收到的邮件,然后提交给相应的Mailet处理,但是哪个匹配器对应哪个Mailet呢?我们还需要配置Mailet的对应关系。同样在config.xml中找到下面的代码:Xml代码 在这段代码下面加入我们自己的Mailet:Xml代码 Xml代码 这样就完成了我们自定义的Mailet的配置部署工作了。重启James服务器,则此Mailet即可生效。 4.1.4 测试Mailet 前面我们已经完

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

40、图所示: 这就说明我们的Mailet已经部署成功了.James+Javamail构建邮件服务(四) HYPERLINK /blog/#m=0&t=1&c=fks_087069083086088066086083083095085085082069083081087070084 l m=0&t=1&c=fks_087069083086088066086083083095085085082069083081087070084 电子邮件开发 2009-11-30 10:17:55 阅读53 评论0 字号:大中小 关键字: james javamail mailet java 邮件5 Javamail

41、邮件存储逻辑简介 5.1 Message存储结构示意图 Message是邮件发送的最终对象,我们一般使用他的子类对象MimeMessage,其子类对象里包含有邮件的MessageID、Subject、Flag、From、Sender、Content等信息,Content是邮件的内容体,其一般是一个Multipart对象(或其子类对象MimeMultipart),所有的邮件内容都存在于Multipart中的。一个Multipart包含有一个或多个BodyPart对象(或其子类对象MimeBodyPart),BodyPart对象用于存储邮件的内容,可以是文本形式,也可以是附件形式。 6 常用Jav

42、amail API简介 核心JavaMail API可以分为两部分,一部分由七个类组成:Session、Message、Address、Authenticator、Transport、Store及Folder,它们都来自Javamail API顶级包(但开发者需要使用的具体子类可能在ernet包内)。可以用这些类完成大量常见的电子邮件任务,包括发送消息、检索消息、删除消息、认证、回复消息、转发消息、管理附件、处理基于HTML文件格式的消息以及搜索或过滤邮件列表,这类任务主要属于MTA范畴。下图描绘了Javamail邮件收发过程。 下面给出这七个核心类的简单介绍,以使读者能对Javamail框架

43、有一个大体了解: 6.1 javax.mail.Session Session类定义了一个基本邮件会话,它是Javamail API最高层入口类,所有其它类都必须经由Session对象才得以生效。Session对象管理配置选项和用于与邮件系统交互的用户认证信息,它使用java.util.Properties对象获取信息,如邮件服务器、用户名、密码及整个应用程序中共享的其它信息。 Session类的构造器是私有的,它不能被继承,也不能使用new语句来创建实例,但它提供了两个表态方法getInstance和getDefaultInstance来获取Session实例,前者创建一个独立的会话,否则获

44、取缺省的共享会话。 API明细:/javamail-1.4.1/docs/javadocs/javax/mail/Session.html 6.2 javax.mail.Message 获得Session对象后,可以开始继续创建要发送的邮件消息,这由Message类来完成,Message实现了Part接口,它表示一个邮件消息,包含一系列属性(attribute)和一个消息内容(content)。消息属性标识了消息地址信息,定义了消息内容的结构(包括内容类型);消息内容使用DataHandler对象包装实际数据。当邮件消息位于目录(folder)中时,系统还使用一个标志位集合来描述它的状态。 M

45、essage是抽象类,实际使用时必需用一个子类代替以表示具体的邮件格式。比如说,Javamail API提供了MimeMessage(位于ernet.MimeMessage包)类,该类扩展自Message,实现了RFC822和MIME标准。Message的子类通常通过字节流构建其实例,相应的,它们也可以生成字节流来传输自身。 API明细:/javamail-1.4.1/docs/javadocs/javax/mail/Message.html 6.3 javax.mail.Address Address类表示电子邮件地址,它是一个抽象类。其子类(最经常使用的子类是ernet.InternetA

46、ddress)提供具体实现,且通常可串行化。 在创建了Session和Message,并设置了消息内容后,可以用Address确定邮件消息的发送者和接收者地址。 API明细:/javamail-1.4.1/docs/javadocs/javax/mail/Address.html 6.4 javax.mail.Authenticator Authenticator代表一个可以为网络连接获取认证信息的对象,它通常通过提示用户输入用户名和密码来收集认证信息,使连接可以访问受保护的资源。对于Javamail API来说,这些资源就是邮件服务器。Javamail Authenticator在javax

47、.mail包中,它和中同名的类Authenticator不同。 要使用Authenticator,必须先创建一个它的子类实例,并且在会话对象创建时为会话注册该Authenticator对象。在需要认证的时候,就会通知Authenticator。程序可以弹出窗口,也可以从配置文件中(虽然没有加密是不安全的)读取用户名和密码,并使用它们作为构造函数参数创建一个PasswordAuthentication对象返回给调用程序。 API明细:/javamail-1.4.1/docs/javadocs/javax/mail/Authenticator.html 6.5 javax.mail.Transpo

48、rt 消息发送的最后步骤是使用Transport类。该类使用指定协议发送消息(通常是SMTP)。Transport是抽象类,它的工作方式与Session有些类似,可以通过静态方法或实例方法发送消息。Transport继承自Service类,而后者提供了很多通用方法,如命名传输、连接服务器、监听传输事件等等。 API明细:/javamail-1.4.1/docs/javadocs/javax/mail/Transport.html 6.6 javax.mail.Store Store是一个抽象类,它模拟了消息存储器及其内部目录(Folder)访问协议,以存储和读取消息,其子类提供具体实现。 St

49、ore定义的存储器包括一个分层的目录体系,消息存储在目录内,。客户程序可以通过获取一个实现了数据库访问协议的Store对象来访问消息存储器,绝大多数存储器要求用户在访问前提供认证信息,connect方法执行了该认证过程。 Store store = session.getStore(pop3);/指定协议 store.connect(host,usename,password);/ API明细:/javamail-1.4.1/docs/javadocs/javax/mail/Store.html 6.7 javax.mail.Folder Folder是一个抽象类,用于分级组织邮件,其子类提供

50、针对具体协议的实现。Folder代表的目录可以容纳消息或子目录,存储在目录内的消息被顺序计数(从1开始到消息总数),该顺序被称为“邮箱顺序”,通常基于邮件消息到达目录的顺序。邮件顺序的变动将改变消息的序列号,这种情况仅发生在客户程序调用Expunge方法擦除目录内设置了Flags.Flag.DELETED标志位的消息时。执行擦除操作后,目录内消息将重新编号。 客户程序可以通过消息序列号或直接通过相应的Message对象应用目录中的消息,由于消息序列号在会话中很可能改变,因此应尽可能保存Message对象而非序列号来反复引用对象。 连接到Store之后,接下来可以获取一个文件夹(Folder)。

51、该文件夹必须先使用open()方法打开,然后才能读取里面的消息: Folder folder = store.getDefaultFolder(); /或 : Folder folder = store.getFolder(inbox); folder.open(Folder.READ_WRITE); Message message = folder.getMessage(); open()方法指定了要打开的文件夹及打开方式(如Folder.READ_WRITE)。 inbox是POP3唯一可以使用的文件夹。如果使用IMAP,还可以用其它的文件夹。获得Message之后,就可以用getCont

52、ent()获得其内容,或者用writeTo()将内容写入输出流。getContent()方法之能得到消息内容,而writeTo()的输出却包含消息头.读完邮件之后要关闭与Folder和Store的连接: folder.close(aBoolean); store.close(); API明细:/javamail-1.4.1/docs/javadocs/javax/mail/Folder.html 7 常用Mailet API简介 Mailet主要包含两个包:org.apache.mailet和org.apache.mailet.dates 7.1 org.apache.mailet 此包主要用

53、于匹配器和Mailet的编写。自定义的Mailet类需要继承org.apache.mailet.GenericMailet,自定义的Matcher类需要继承org.apache.mailet.GenericMatcher或org.apache.mailet.GenericRecipientMatcher。例子详见第四章Mailet快速入门。 API明细:/MailetSDK/javadocs/org/apache/mailet/package-summary.html 7.2 org.apache.mailet.dates 此包主要用于邮件中的日期格式的转换。 API明细:/MailetSDK

54、/javadocs/org/apache/mailet/dates/package-summary.html James+Javamail构建邮件服务(五) HYPERLINK /blog/#m=0&t=1&c=fks_087069083086088066086083083095085085082069083081087070084 l m=0&t=1&c=fks_087069083086088066086083083095085085082069083081087070084 电子邮件开发 2009-11-30 10:18:50 阅读33 评论0 字号:大中小 关键字: james java

55、mail mailet java 邮件8 Javamail的高级应用 8.1 用Javamail实现对邮件的查找 在邮件的高级应用中,当遇到某个帐户中的邮件数非常多的时候,而用户往往只需要对其中的某几封邮件进行处理。倘若要把所有的邮件都取出来,再进行对应信息的判断提取,这无疑将大大加重邮件服务器的负担。为了改善这种状况,Javamail内部提供了一个专门用于邮件查找的包:javax.mail.search。这个包将通过对SearchTerm对象进行设置,而后提交给服务器,服务器端有相应的过滤器,根据SearchTerm对象的设置将邮件过滤的结果传回给客户端。以提高工作效率,减轻服务器端负担。下

56、面就让我们一起来做一个例子说明一下我们应该如何使用search这个包吧。 8.1.1 业务描述 编写一个类,实现对helloworldlocalhost邮件中邮件的条件搜索功能。在本例中实现对主题中包含“测试”,发件人是chenfengcnlocalhost,的邮件的搜索。 8.1.2 编码实现 Java代码 packagecom.newland.javamail.sample1; importjava.util.ArrayList; importjava.util.Properties; importjavax.mail.Folder; importjavax.mail.Message; i

57、mportjavax.mail.MessagingException; importjavax.mail.NoSuchProviderException; importjavax.mail.Session; importjavax.mail.Store; importernet.InternetAddress; importjavax.mail.search.AndTerm; importjavax.mail.search.FromTerm; importjavax.mail.search.SearchTerm; importjavax.mail.search.SubjectTerm; /*

58、*使用Javamail的Search包实现对邮件的搜索功能 *authorChen.Feng(Kevin) *mail:chenfengcn *qq:67758633 * */ publicclassSearchMail privatestaticArrayListlist=newArrayList(); publicstaticvoidmain(Stringargs) /用户信息 Stringuser=helloworld; Stringpassword=881213; /配置服务器属性 Propertiesprops=newProperties(); props.put(mail.smtp

59、.host,localhost);/smtp服务器 props.put(mail.smtp.auth,true);/是否smtp认证 props.put(mail.smtp.port,25);/设置smtp端口 props.put(tocol,smtp);/发邮件协议 props.put(tocol,pop3);/收邮件协议 /创建会话 Sessionsession=Session.getInstance(props,null); Storestore=null; try /连接Store store=session.getStore(pop3); store.connect(localhos

60、t,user,password); /打开Folder Folderfolder=store.getFolder(inbox); folder.open(Folder.READ_ONLY); /构造搜索规则 SearchTermsubterm=newSubjectTerm(测试); SearchTermfterm=newFromTerm(newInternetAddress(chenfengcnlocalhost); SearchTermst=newAndTerm(subterm,fterm); Messagemessage=folder.search(st); /输出搜索到的邮件的主题 fo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论