JavaMail API简介
- 格式:pdf
- 大小:232.53 KB
- 文档页数:16
java发邮件方法Java是一种功能强大的编程语言,它提供了多种方法来实现发送邮件的功能。
本文将介绍两种常用的Java发邮件的方法,分别是使用JavaMail API和使用Spring Framework的JavaMail库。
JavaMail API是一个用于发送和接收电子邮件的标准API,它是Java平台的一部分。
使用JavaMail API,我们可以在Java程序中轻松地发送邮件。
下面是使用JavaMail API发送邮件的步骤:1. 添加依赖:首先,我们需要在我们的Java项目中添加JavaMail API的依赖。
可以通过Maven或Gradle等构建工具,将以下依赖添加到项目的构建文件中:```xml<dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.6.2</version></dependency>```2. 创建会话对象:接下来,我们需要创建一个会话对象,用于与邮件服务器进行通信。
可以使用javax.mail.Session类的getInstance()方法来创建会话对象,该方法接受一个Properties对象作为参数,用于指定邮件服务器的配置信息,如SMTP 服务器的地址、端口号等。
```javaProperties properties = new Properties();properties.put("mail.smtp.host", "");properties.put("mail.smtp.port", "25");Session session = Session.getInstance(properties);```3. 创建邮件消息:然后,我们需要创建一个邮件消息对象,用于设置邮件的各种属性,如发件人、收件人、主题、内容等。
JavaMail使用在Web应用程序的开发中,经常会有处理邮件的需求,在J2EE中提供了邮件处理的API,使用这些API,可以非常方便地接收和发送邮件。
1、邮件协议简介SMTP(Simple Mial Transfer Protocol) 即简单邮件传输协议,它提供了一种可靠而且有效的电子邮件传输协议,SMTP主要用于系统之间传递邮件信息,而且还可以提供来信有关的通知服务。
在发送电子邮件的时候,可以选择这个协议,在JavaMail中提供了对SMTP协议的支持。
POP(Post Office Protocol) 即邮局协议,而POP3则是POP协议的第三个版本,这个协议规定了用户连接到邮件服务器和接收邮件的规则,是Internet电子邮件的第一个离线协议标准。
简单说POP3就是在接收电子邮件的简单通信协议,用户在接收邮件的时候可以选择使用这个协议,在JavaMail中同样支持这个电子邮件协议。
2、开发环境的配置拷贝相关jar包到lib目录下,或配置在classpath中即可3、一个简单的例子为了方便程序的演示,提供了一个测试邮箱,邮箱的地址为jjqibmbld@,密码为123。
这个邮箱的SMTP服务器地址为,POP3服务器地址为。
以下程序演示的是用上面的邮箱向jjq@发送邮件的例子(TestJavaMail.java)那么如何发送带有附件的E-mail呢,如下例子(TestJavaMailAttachment.java)此程序,用户可以在jsp页面上输入要发送邮件的内容和地址,通过表单把邮件的内容提交给一个Servlet处理,这个Servlet调用一个JavaBean进行邮件发送。
为了方便演示,默认发送邮件的地址为jjqibmbld@6、发送带有附件的邮件AttachmentSender.java。
JavaMail组件的简单介绍一、什么是JavaMailJavaMail是Sun发布的用来处理email的API。
它可以方便地执行一些常用的邮件传输。
虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。
除此以外,你还需要有Sun的JavaBeans Activation Framework (JAF)。
JavaBeans Activation相关的包你可以到sun的官方网站上去下载二、如何使用JavaMail组件在使用JavaMail发送邮件之前,先来看一下在发送邮件过程中主要使用到的几个类以及它们的用处和用法!Session定义了一个基本的邮件会话,所有的基于JavaMail的程序都至少需要一个或全部的对话目标。
Session对象需要一个,Session的构造函数是私有的,你可以通过getDefaultInstance()方法来取得一个单一的可以被共享的默认的Session,如:Properties props=new Properties();……..Session session = Session.getDefaultInstance(props, null);或者,可以使用getInstance()方法来创建一个唯一的Session如:Properties props=new Properties();…….Session session=Session.getInstance(props,null);在多数情况下,整个应用中使用一个共享Session已经足够了;2、创建了Session 对象以后,那么下面就要创建Message对象来发送Session., Message是一个抽象类,再大部分应用中可以使用它的子类可以用如下的方法创建一个Message;Message newMessage = new MimeMessage(sendMailSession);一旦得到了Message,就可以设置它的各个部分。
Java实现发送邮件,图⽚,附件1、JavaMail 介绍JavaMail 是sun公司(现以被甲⾻⽂收购)为⽅便Java开发⼈员在应⽤程序中实现邮件发送和接收功能⽽提供的⼀套标准开发包,它⽀持⼀些常⽤的邮件协议,如前⾯所讲的SMTP,POP3,IMAP,还有MIME等。
我们在使⽤JavaMail API 编写邮件时,⽆须考虑邮件的底层实现细节,只要调⽤JavaMail 开发包中相应的API类就可以了。
JavaMail 下载地址:2、JavaMail APIJavaMail API 按照功能可以划分为如下三⼤类:①、创建和解析邮件的API②、发送邮件的API③、接收邮件的API以上三种类型的API在JavaMail 中由多个类组成,但是主要有四个核⼼类,我们在编写程序时,记住这四个核⼼类,就很容易编写出Java邮件处理程序。
Message 类:javax.mail.Message 类是创建和解析邮件的核⼼ API,这是⼀个抽象类,通常使⽤它的⼦类javax.mail.internet.MimeMessage 类。
它的实例对象表⽰⼀份电⼦邮件。
客户端程序发送邮件时,⾸先使⽤创建邮件的 JavaMail API 创建出封装了邮件数据的 Message 对象,然后把这个对象传递给邮件发送API(Transport 类)发送。
客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message 类的实例中,客户端程序在使⽤邮件解析API从这个对象中解析收到的邮件数据。
Transport 类:javax.mail.Transport 类是发送邮件的核⼼API 类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如 SMTP 协议,客户端程序创建好Message 对象后,只需要使⽤邮件发送API 得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调⽤它的发送⽅法,就可以把邮件发送给指定的 SMTP 服务器。
JavaMail概述J avaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。
它是Sun 公司发布的用来处理email的API,是一种可选的、用于读取、编写和发送电子消息的包(标准扩展)。
用户可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。
Java Mail是JavaEE平台提供的邮件API。
使用这套API,可以轻松实现邮件的创建,发送和接受。
1.什么是E-mailE-mail是用户间或应用程序间交换信息的Internet标准。
每个用户都有自己的网上邮箱,发送方把信息发送到自己的网上信箱,并声明信息的接收方;该信箱所在的“邮局”会把信息发送到接收方的“邮局”,接收方从接收方的“邮局”中自己的信箱获取信息。
这样就完成了信息从发送方到接收方的传递。
所以,要发送或者接收邮件首先应该有自己的邮箱。
E-mail消息可以包含普通文本,也可以包含更为复杂的多媒体数据类型和图像声音等。
这样,用户就可以交换各种各样的信息。
每个E-mail消息的头信息中都包含消息的发出者、发送的目的地和其他相关信息。
2 E-mail体系结构要完成消息的交互,需要几方面的支持:邮件发送客户端程序、邮件接收客户端程序、邮件发送服务器和邮件接收服务器,此外,还需要相关的通信协议。
邮件发送客户端程序和邮件接收客户端程序可以是相同的,例如经常使用的微软的Outlook既可以发送邮件,也可以接收邮件。
邮件发送服务器和邮件接收服务器也可以是相同的服务器。
在与邮件服务器交互的过程中,主要完成两个动作,把邮件发送到邮件服务器,以及从邮件服务器读取邮件。
邮件发送方通过邮件发送客户端把邮件发送到发送方的邮件服务器,在发送的过程中需要用到SMTP协议。
发送方的邮件服务器把邮件发送到接收方的邮件服务器,使用的协议也是SMTP。
邮件接收方从接收方邮件服务器接收邮件,使用POP3协议或者IMAP协议。
3 E-mail相关的协议简单邮件传输协议(SMTP)在邮件发送方把邮件发送到发送方邮件服务器的时候,需要用到简单邮件传输协议(Simple Mail Transport Protocol,简称SMTP),发送方邮件服务器把邮件发送到接收方邮件服务器的时候,也要用到SMTP。
张孝祥Java邮件开发详解Java邮件开发是一项在当今信息时代非常重要的技能。
随着电子邮件在个人和商业领域的广泛应用,了解如何使用Java编程语言开发邮件应用程序是非常有价值的。
本文将详细介绍张孝祥在Java邮件开发方面的经验和技巧。
一、Java邮件开发概述邮件开发是一种基于邮件传输协议的应用程序开发技术。
它可以实现电子邮件的发送、接收和管理等功能。
Java是一种跨平台的高级编程语言,具有广泛的应用领域。
通过Java,我们可以利用已有的邮件传输协议和库来开发强大的邮件应用程序。
二、Java邮件开发的基本原理Java邮件开发的基本原理是利用Java Mail API与邮件服务器进行通信。
Java Mail API是一组用于发送和接收电子邮件的类和接口。
它提供了Java开发人员所需的一切工具,使他们能够轻松地编写邮件应用程序。
三、Java邮件开发的核心类1. Session类Session类是Java Mail API中的一个关键类,它表示一个邮件会话。
我们可以通过Session类来配置邮件服务器的连接参数,例如主机地址、端口号和认证信息等。
2. Message类Message类用于表示一封电子邮件。
我们可以通过Message类来设置邮件的发件人、收件人、主题、正文和附件等信息。
3. Transport类Transport类用于将邮件发送到邮件服务器并进行传输。
我们可以通过Transport类来发送邮件。
4. Store类Store类用于从邮件服务器接收邮件并进行存储。
我们可以通过Store类来接收和管理邮件。
四、Java邮件开发的基本步骤1. 创建一个Session对象,配置邮件服务器的连接参数。
2. 创建一个Message对象,设置邮件的发件人、收件人、主题、正文和附件等信息。
3. 使用Transport类将Message对象发送到邮件服务器。
4. 使用Store类从邮件服务器接收邮件。
五、Java邮件开发的实际应用Java邮件开发可应用于许多实际场景,例如:1. 发送邮件:可以使用Java Mail API发送电子邮件,便于快速、准确地与他人沟通。
java mail详解JavaMail是Java平台上用于发送、接收和管理电子邮件的API。
它提供了一种方便的方式来处理电子邮件,包括发送和接收电子邮件,以及访问和操作邮件服务器。
首先,让我们来看看JavaMail API的一些主要功能和用法。
JavaMail API包括javax.mail包,它提供了发送和接收电子邮件的类和接口。
要发送电子邮件,你需要使用javax.mail.Session类来创建一个会话对象,然后使用javax.mail.internet.MimeMessage类来创建邮件消息。
你可以设置邮件的主题、内容、附件等信息,并使用javax.mail.Transport类的send方法来发送邮件。
另外,JavaMail API也支持接收邮件。
你可以使用javax.mail.Store类来连接到邮件服务器,并使用javax.mail.Folder类来访问邮件文件夹。
通过这些类,你可以检索邮件、读取邮件内容以及执行其他邮件管理操作。
JavaMail API还支持与邮件服务器的安全通信,包括SSL和TLS协议。
你可以使用javax.mail.Session类的属性来配置安全连接参数,以确保与邮件服务器的通信是安全的。
除了基本的发送和接收邮件功能,JavaMail API还提供了一些高级功能,比如处理邮件附件、设置邮件优先级、回复和转发邮件等。
你可以使用javax.mail.internet.MimeBodyPart类来处理邮件附件,使用javax.mail.Flags类来设置邮件标记,以及使用javax.mail.internet.InternetAddress类来表示邮件地址等。
总之,JavaMail API提供了丰富的功能和灵活的接口,使得在Java应用程序中处理电子邮件变得非常方便。
无论是发送简单的文本邮件,还是处理复杂的邮件操作,JavaMail API都能满足你的需求。
希望这些信息能帮助你更好地理解和使用JavaMail API。
JavaWeb学习总结(五⼗⼆)——使⽤JavaMail创建邮件和发送邮件⼀、RFC882⽂档简单说明 RFC882⽂档规定了如何编写⼀封简单的邮件(纯⽂本邮件),⼀封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使⽤空⾏分隔。
邮件头包含的内容有:1. from字段 --⽤于指明发件⼈2. to字段 --⽤于指明收件⼈3. subject字段 --⽤于说明邮件主题4. cc字段 -- 抄送,将邮件发送给收件⼈的同时抄送给另⼀个收件⼈,收件⼈可以看到邮件抄送给了谁5. bcc字段 -- 密送,将邮件发送给收件⼈的同时将邮件秘密发送给另⼀个收件⼈,收件⼈⽆法看到邮件密送给了谁 邮件体指的就是邮件的具体内容。
⼆、MIME协议简单介绍 在我们的实际开发当中,⼀封邮件既可能包含图⽚,⼜可能包含有附件,在这样的情况下,RFC882⽂档规定的邮件格式就⽆法满⾜要求了。
MIME协议是对RFC822⽂档的升级和补充,它描述了如何⽣产⼀封复杂的邮件。
通常我们把MIME协议描述的邮件称之为MIME邮件。
MIME协议描述的数据称之为MIME消息。
对于⼀封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使⽤分隔线对多段数据进⾏分隔,并使⽤Content-Type头字段对数据的类型、以及多个数据之间的关系进⾏描述。
三、使⽤JavaMail创建邮件和发送邮件 JavaMail创建的邮件是基于MIME协议的。
因此可以使⽤JavaMail创建出包含图⽚,包含附件的复杂邮件。
3.1、JavaMail API的简单介绍3.2、创建邮件发送测试项⽬3.3、发送⼀封只包含⽂本的简单邮件1package me.gacl.main;23import java.util.Properties;4import javax.mail.Message;5import javax.mail.Session;6import javax.mail.Transport;7import javax.mail.internet.InternetAddress;8import javax.mail.internet.MimeMessage;910/**11* @ClassName: Sendmail12* @Description: 发送Email13* @author: 孤傲苍狼14* @date: 2015-1-12 下午9:42:5615*16*/17public class Sendmail {1819/**20 * @param args21 * @throws Exception22*/23public static void main(String[] args) throws Exception {2425 Properties prop = new Properties();26 prop.setProperty("mail.host", "");27 prop.setProperty("mail.transport.protocol", "smtp");28 prop.setProperty("mail.smtp.auth", "true");29//使⽤JavaMail发送邮件的5个步骤30//1、创建session31 Session session = Session.getInstance(prop);32//开启Session的debug模式,这样就可以查看到程序发送Email的运⾏状态33 session.setDebug(true);34//2、通过session得到transport对象35 Transport ts = session.getTransport();36//3、使⽤邮箱的⽤户名和密码连上邮件服务器,发送邮件时,发件⼈需要提交邮箱的⽤户名和密码给smtp服务器,⽤户名和密码都通过验证之后才能够正常发送邮件给收件⼈。
使用JavaMail API收发邮件31.JavaMail API按其功能划分通常可分为如下三大类(1)创建和解析邮件内容的API:Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。
(2)发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。
(3)接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
2.Session类Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。
Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
3.使用JavaMail发送一封简单的邮件创建包含邮件服务器的网络连接信息的Session对象。
创建代表邮件内容的Message对象。
创建Transport对象、连接服务器、发送Message、关闭连接。
4.实例(1)JavaMail邮件只发送内容public class SendMail{public static void main(String[]args)throws Exception{//属性文件Properties props=new Properties();//设置邮件的发送主机名、发送协议和是否验证props.setProperty("mail.host","");props.setProperty("mail.transport.protocol","smtp");props.setProperty("mail.smtp.auth","true");//获取发送接收邮件环境的对象Session session=Session.getInstance(props);Message message=createMessage(session);//创建发送邮件的对象Transport tsp=session.getTransport();tsp.connect("csdn","csdn");tsp.sendMessage(message,message.getAllRecipients());tsp.close();}public static Message createMessage(Session session)throws Exception{ //根据环境对象创建一份邮件MimeMessage message=new MimeMessage(session);//设置邮件属性message.setFrom(new InternetAddress("csdn@"));message.setRecipient(Message.RecipientType.TO,newInternetAddress("csdn@"));message.setSubject("hello");//创建邮件体MimeBodyPart text=new MimeBodyPart();text.setContent("你好?","text/html;charset=utf-8");//设置描述关系MimeMultipart mm=new MimeMultipart();mm.addBodyPart(text);message.setContent(mm);message.saveChanges();return message;}}(2)JavaMail邮件发送内容和图片public class SendImageMail{public static void main(String[]args)throws Exception{//属性文件Properties props=new Properties();//设置邮件的发送主机名、发送协议和是否验证props.setProperty("mail.host","");props.setProperty("mail.transport.protocol","smtp");props.setProperty("mail.smtp.auth","true");//获取发送接收邮件环境的对象Session session=Session.getInstance(props);Message message=createMessage(session);//创建发送邮件的对象Transport tsp=session.getTransport();tsp.connect("csdn","csdn");tsp.sendMessage(message,message.getAllRecipients());tsp.close();}public static Message createMessage(Session session)throws Exception{ MimeMessage message=new MimeMessage(session);message.setFrom(new InternetAddress("csdn@"));message.setRecipient(Message.RecipientType.TO,newInternetAddress("csdn@"));message.setSubject("图片");MimeBodyPart text=new MimeBodyPart();text.setContent("好看吗?<br/><imgsrc='cid:xx.jpg'>","text/html;charset=utf-8");MimeBodyPart image=new MimeBodyPart();image.setDataHandler(new DataHandler(newFileDataSource("src\\f.jpg")));image.setContentID("xx.jpg");MimeMultipart mm=new MimeMultipart();mm.addBodyPart(text);mm.addBodyPart(image);mm.setSubType("related");message.setContent(mm);message.saveChanges();return message;}}(3)JavaMail邮件发送内容、图片和附件public class SendAttchImageMail{public static void main(String[]args)throws Exception{//属性文件Properties props=new Properties();//设置邮件的发送主机名、发送协议和是否验证props.setProperty("mail.host","");props.setProperty("mail.transport.protocol","smtp");props.setProperty("mail.smtp.auth","true");//获取发送接收邮件环境的对象Session session=Session.getInstance(props);Message message=createMessage(session);//创建发送邮件的对象Transport tsp=session.getTransport();tsp.connect("csdn","csdn");tsp.sendMessage(message,message.getAllRecipients());tsp.close();}public static Message createMessage(Session session)throws Exception{ MimeMessage message=new MimeMessage(session);message.setFrom(new InternetAddress("csdn@"));message.setRecipient(Message.RecipientType.TO,newInternetAddress("csdn@"));message.setSubject("图片");MimeBodyPart text=new MimeBodyPart();text.setContent("好看吗?<br/><imgsrc='cid:xx.jpg'>","text/html;charset=utf-8");MimeBodyPart image=new MimeBodyPart();image.setDataHandler(new DataHandler(newFileDataSource("src\\f.jpg")));image.setContentID("xx.jpg");MimeBodyPart attch=new MimeBodyPart();DataHandler dh=new DataHandler(new FileDataSource("src\\默默无语.mp3"));attch.setDataHandler(dh);String name=dh.getName();attch.setFileName(MimeUtility.encodeText(name));MimeMultipart mm=new MimeMultipart();mm.addBodyPart(text);mm.addBodyPart(image);mm.setSubType("related");MimeBodyPart part=new MimeBodyPart();part.setContent(mm);MimeMultipart m=new MimeMultipart();m.addBodyPart(part);m.addBodyPart(attch);m.setSubType("mixed");message.setContent(m);message.saveChanges();return message;}}注:邮箱地址必须是真实的。
javamail:JavaMail API简介疯狂代码 / ĵ:http://Java/Article7029.html转载自:JavaMailAPI是种可选、能用于读取、编写和发送电子消息包(标准扩展)您可使用这种包创建邮件用户代理(MailUserAgentMUA)类型它类似于Eudora、Pine及MicrosoftOutlook这些邮件其主要目不是像发送邮件或其他邮件传输代理(MailTransferAgentMTA)类型那样用于传输、发送和转发消息换句话说用户可以和MUA类型交互以阅读和撰写电子邮件MUA依靠MTA处理实际发送任务JavaMailAPI设计是为收发信息提供和协议无关访问方式是把该API划分成两个部分:?该API第个部分是本课程重点基本上是如何发送和接收独立于提供/协议消息?第 2个部分则使用特定协议语言如:SMTP、POP、IMAP和NNTP如果要让JavaMailAPI和服务器通信就需要为的提供协议由于Sun公司对特定协议提供有充分介绍用户可以免费获取所以本课程没有介绍创建特定协议提供内容复习相关协议在学习JavaMailAPI深层知识的前让我们回过头来看看在该API中使用协议,本质上有4种人们常用协议:?SMTP?POP?IMAP?MIME您还需要了解NNTP及其他些协议理解这些协议基本原理有助于您理解如何使用JavaMailAPI而该API设计要和协议无关所以不能克服这些基础协议限制如果选用协议不支持某种功能那么JavaMailAPI也无法在其上添加这种功能(正如您会儿就会看到在操作POP协议时常常会碰到这种问题)SMTP简单邮件传输协议(SMTP)是用于传送电子邮件机制在JavaMailAPI环境中您基于JavaMail将和您公司或Internet服务提供商(ISP)SMTP服务器通信该SMTP服务器将会把消息转发给用作接收消息SMTP服务器最后用户可通过POP或IMAP协议获取该消息由于支持身份验证所以不需要SMTP服务器是种开放转发器但需要确保SMTP服务器配置正确JavaMailAPI中没有集成用于处理诸如配置服务器以转发消息或添加/删除电子邮件帐户这类任务功能POPPOP含义是邮局协议当前版本为3也称作POP3该协议是在RFC1939中定义POP是Internet上大多数人用来接收邮件机制它为每个用户每个邮箱定义支持这是它所做全部工作也是大多数问题根源在使用POP协议时人们熟悉很多功能如查看收到了多少新邮件消息功能POP根本不支持这些功能都内置到诸如Eudora或MicrosoftOutlook的类邮件中能为您记住接收上封邮件以及计算有多少新邮件这类信息因此使用JavaMailAPI时如果想获取这类信息将需要由自己进行计算IMAPIMAP是用于接收消息更加高级协议它是在RFC2060中定义IMAP含义是“Internet消息访问协议”当前版本是第4版也称作IMAP4使用IMAP时您邮件服务器必须支持该协议您不能只是简单地把转变为支持IMAP而不是支持POP就指望能支持IMAP中切假定您邮件服务器支持IMAP那么基于JavaMail就可利用在服务器上拥有多个文件夹用户并且这些文件夹可以被多个用户共享功能由于IMAP协议具有更高级功能您也许会想IMAP应该被每个人使用但事实不是这样IMAP会加重邮件服务器负荷它需要服务器接收新消息发送消息给请求用户并在多个文件夹中为每个用户维护这些消息而这要集中备份因而长期下去用户文件夹会变得越来越大当磁盘空间用光了时每个人都会遭受损失而使用POP协议时已保存消息可以解除服务器重负MIMEMIME含义是“多用途网际邮件扩充协议”它不是种邮件传输协议相反它定义传输内容:消息格式、附件等许多文档都定义了MIME协议包含:RFC822、RFC2045、RFC2046和RFC2047作为JavaMailAPI用户般不需要担心这些格式但是这些格式确实存在并为您所用NNP和其他协议由于JavaMailAPI分开了提供和其他部分所以您可以轻松地为附加协议添加支持Sun公司提供第3方提供清单这些提供要利用Sun公司不支持少见协议在这份清单中您将会看到对NNTP(网络新闻传输协议)[新闻组]、S/MIME(安全多用途网际邮件扩充协议)及其他协议提供支持第3方提供安装目前有两种版本JavaMailAPI最常用:1.2和1.1.3本课程中所有例子都适用于这两种版本其中JavaMailAPI1.2是最新而JavaMailAPI1.1.3中包含了Java2企业版(J2EE)平台1.2.1版所以它仍然很常用使用JavaMailAPI版本会对您下载和安装产生些影响这两种版本JavaMailAPI都能和JDK1.1.6、Java2标准版(J2SE)平台1.2.x和1.3.x协同工作 注意:在安装了Sun公司JavaMail工具后会在演示目录下看到许多举例安装JavaMail1.2要使用JavaMail1.2API可以下载JavaMail1.2工具然后解压缩javamail-1_2.zip文件并把mail.jar文件添加到典型安装路径下JavaMail1.2工具带有SMTP、IMAP4和POP3提供以及核心类安装完JavaMail1.2后再安装JavaBeansActivationFramework安装JavaMail1.1.3要使用JavaMail1.1.3API可以下载JavaMail1.1.3工具然后解压缩javamail1_1_3.zip文件并把mail.jar文件添加到典型安装路径下JavaMail1.1.3工具带有SMTP和IMAP4提供以及核心类如果您想用JavaMail1.1.3访问POP服务器需要下载并安装POP3提供Sun公司拥有个独立于JavaMail工具提供在下载并解压缩pop31_1_1.zip文件后也还需要把pop3.jar添加到典型安装路径下安装完JavaMail1.1.3后再安装JavaBeansActivationFramework安装JavaBeansActivationFrameworkJavaMailAPI所有版本都需要JavaBeansActivationFramework(JavaBeans激活框架)这种框架提供了对输入任意数据块支持并能相应地对其进行处理看上去效果好像不太好但该框架是在当今许多浏览器和邮件工具中可以找到基本MIME类型支持下载该框架后解压缩jaf1_0_1.zip文件并将activation.jar文件添加到典型安装路径下对于JavaMail1.2用户现在应该把mail.jar和activation.jar文件添加到典型安装路径下对于JavaMail1.1.3用户现在应该把mail.jar、pop3.jar和activation.jar添加到典型安装路径下如果您不打算使用POP3就不需要把pop3.jar文件添加到典型安装路径下如果您不想更改安装路径环境变量可以把JAR文件复制到Java运行时环境(JRE)目录下lib/ext目录下例如对于J2SE1.3版本Windows平台上默认目录应该是C:\\jdk1.3\\jre\\lib\\ext使用Java2企业版如果您使用是J2EE则在使用基本JavaMailAPI时不需要做什么特殊工作;JavaMailAPI带有J2EE类只要确保j2ee.jar文件位于典型安装路径下并完成了所有设置工作对于J2EE1.2.1POP3提供是单独提供因此需要下载该提供并按安装JavaMail1.1.3步骤在J2EE1.2.1中包含POP3提供J2EE1.3用户会获得J2EE和POP3提供因而不需要对POP3提供执行独立安装使用这两种版本J2EE用户都不需要安装JavaBeansActivationFramework练习设置您JavaMail环境复习核心类在开始深入研究JavaMail类的前首先让用户浏览下构成API核心类:会话、消息、地址、验证、传输存储和文件夹所有这些类都可以在JavaMailAPI即javax.mail顶层包中找到尽管您将频繁地发现您自己使用子类是在javax.mail.ernet包中找到Session类Session类定义了个基本邮件会话通过该会话可让别工作顺利执行Session对象利用java.util.Properties对象获取诸如邮件服务器、用户名、密码等信息以及其他可在整个应用中共享信息Session类构造器是私有您可以获得个可被getDefaultInstance思路方法共享单默认会话:Propertiesprops=Properties;//fillpropswithanyinformationSessionsession=Session.getDefaultInstance(props,null);或者您可以用getInstance思路方法创建个独特会话:Propertiesprops=Properties;//fillpropswithanyinformationSessionsession=Session.getInstance(props,null);这两种情形下null参数都是种Authenticator对象它不是在此时使用详细信息请参阅其后“Autherticator”节 在大多数情况下使用共享会话就足够了即使为多个用户邮箱处理邮件会话也是如此您可以在通信过程后面步添加上用户名和密码组合并保持所有切是独立Message类旦创建了自己Session对象就是该去创建要发送消息时候了这时就要用到消息类型作为个抽象类您必须操作个子类在大多数情况下该子类是javax.mail.ernet.MimeMessage个MimeMessage是种理解MIME类型和报头(在区别RFC文档中均有定义)消息消息报头被严格限制成只能使用US-ASCII尽管非ASCII可以被编码到某些报头字段中可以通过将Session对象传递给MimeMessage构造器思路方法来创建消息:MimeMessagemessage=MimeMessage(session);注意:还有其他构造器像用于创建消息源于RFC822格式化输入流构造器旦创建了消息就可以设置其各个部分如Message(消息)实现Part(部分)接口(以MimeMessage实现MimePart)设置内容基本机制是Content思路方法它带有表示内容和MIME类型参数:message.Content(\"Hello\",\"text/plain\");但是如果正在使用MimeMessage并且您消息是纯文本那么您就可以使用Text思路方法该思路方法只需要个表示实际内容参数默认MIME类型为纯文本:message.Text(\"Hello\");对于纯文本消息Text思路方法更常常被用来设置内容要发送其他类型消息如HTML消息就要使用Content思路方法现在用更多是HTML消息要设置主题可以使用Subject思路方法:message.Subject(\"First\");Address类旦创建了会话和消息并为消息填充了内容就需要用Address类为您信件标上地址了同Message类样Address类也是种抽象类您可以使用javax.mail.ernet.InternetAddress类要创建只带有电子邮件地址地址可以把电子邮件地址传递给Address类构造器:Addressaddress=InternetAddress(\"president@\");如果想让个名字出现在电子邮件地址后也可以将其传递给构造器:Addressaddress=InternetAddress(\"president@\",\"GeorgeBush\");您要为消息from(发送者)字段和to(接收者)字段创建地址对象除非您邮件服务器阻止这样做否则要在发送消息中注明该消息发送者旦创建好了地址有两种思路方法可让您将地址和消息连接起来为了鉴别发送者您可以使用From和ReplyTo思路方法message.From(address)如果您消息需要显示多个地址来源则可以使用addFrom思路方法:Addressaddress=...;message.addFrom(address);为了鉴别消息接收者您可以使用addRecipient思路方法该思路方法除了需要个地址参数外还需要个Message.RecipientType属性(消息接收类型)message.addRecipient(type,address)地址3种预定义类型如下:?Message.RecipientType.TO??Message.RecipientType.BCC因此如果条消息将发送给副总统同时还将发送该消息副本给第夫人则采用下面代码:AddresstoAddress=InternetAddress(\"vice.president@\");AddressccAddress=InternetAddress(\"dy@\");message.addRecipient(Message.RecipientType.TO,toAddress);message.addRecipient(,ccAddress);JavaMailAPI没有提供检查电子邮件地址有效性机制您可以自己编写支持扫描有效(在RFC822文档中所定义)或检验MX(邮件交换)记录这些都超越了JavaMailAPI范围Authenticator类和类样JavaMailAPI可以利用Authenticator(验证)类通过用户名和密码来访问受保护资源对于JavaMailAPI来说这种受保护资源是指邮件服务器JavaMailAuthenticator类可以在javax.mail包中找到并有别于同名类当JavaMailAPI在Java1.1下工作时JavaMail和不会共享同个Authenticator类名称这是Java1.1中不含有要使用Authenticator类您可以使用该抽象类子类并通过getPasswordAuthentication思路方法返回个PasswordAuthentication例子在创建时您必须用会话记录Authentication类其后当需要进行身份验证时会通知您Authenticator会弹出个窗口或从个配置文件(尽管不加密就不安全)中读取用户名和密码并把它们作为个PasswordAuthentication对象返回给Propertiesprops=Properties;//fillpropswithanyinformationAuthenticatorauth=MyAuthenticator;Sessionsession=Session.getDefaultInstance(props,auth);Transport类发送消息最后步操作是使用Transport类该类使用特定于协议(通常是SMTP)语言来发送消息它是个抽象类其操作和Session类有些相似您可以通过只静态send思路方法来使用该类默认版本:Transport.send(message);或者您可以从用于您协议会话中获取个特定例子然后传递用户名和密码(不必要时可以为空)并发送消息最后关闭连接:message.saveChanges;//implicitwithsendTransporttransport=session.getTransport(\"smtp\");transport.connect(host,username,password);transport.sendMessage(message,message.getAllRecipients);transport.close;当您需要发送多个消息时建议采用后种思路方法它将保持消息间活动服务器连接而基本send机制会为每个思路方法都建立条独立连接注意:要查看经过邮件服务器邮件命令可以用session.Debug(true)思路方法设置调试标志Store和Folder类使用Session类来获取消息开始时和发送消息很相似但是在获取会话后很有可能使用用户名和密码或Authenticator类来连接Store类和Transport类样您要告诉Store类将使用什么协议://Storestore=session.getStore(\"imap\");Storestore=session.getStore(\"pop3\");store.connect(host,username,password);在连接Store类后就可以获取个Folder类在读取其中消息前必须先打开该类Folderfolder=store.getFolder(\"INBOX\");folder.open(Folder.READ_ONLY);Messagemessage=folder.getMessages;对于POP3协议惟可用文件夹是INBOX如果使用是IMAP协议则可以使用其他文件夹注意:Sun公司提供本来想提供方便而Messagemessage=folder.getMessages;这条语句却是种从服务器逐条读取消息缓慢操作所以仅当您确实需要获取消息部分(该内容是所检索消息内容)时可以使用这条语句旦读取消息就可以使用getContent思路方法获取其内容或使用writeTo思路方法将其内容写到个流中getContent思路方法只获取消息内容而writeTo思路方法则还会输出报头.out.prln(((MimeMessage)message).getContent);旦您阅读完邮件就可以关闭对文件夹和存储连接folder.close(aBoolean);store.close;传递给文件夹close思路方法布尔变量指定了是否通过清除已删除消息来更新文件夹继续前进实际上理解使用这7个类方式是使用JavaMailAPI处理几乎所有事情所需要全部内容用这7个类以外方式构建JavaMailAPI其大多数功能都是以几乎完全相同或特定方式来执行任务就好像内容是附件特定任务如:搜索、隔离等将在后面进行介绍使用JavaMailAPI您已经看到了如何操作JavaMailAPI核心部分在下面几节中您将学习如何连接几个部分以执行特定任务发送消息发送电子邮件消息涉及到获取会话、创建和填充消息并发送消息这些操作您可以在获取Session时通过为要传递Properties对象设置mail.smtp.host属性来指定您SMTP服务器Stringhost=...;Stringfrom=...;Stringto=...;//GetsystempropertiesPropertiesprops=.getProperties;//Setupmailserverprops.put(\"mail.smtp.host\",host);//GetsessionSessionsession=Session.getDefaultInstance(props,null);//DefinemessageMimeMessagemessage=MimeMessage(session);message.From(InternetAddress(from));message.addRecipient(Message.RecipientType.TO,InternetAddress(to));message.Subject(\"HelloJavaMail\");message.Text(\"WelcometoJavaMail\");//SendmessageTransport.send(message);您应该在try-catch块中编写代码以在创建消息并发送它时可以抛出个异常练习发送您第个消息获取消息对于阅读邮件来说首先您要获取个会话然后获取并连接到个相应用于您收件箱存储上接着打开相应文件夹再获取消息同时不要忘记了操作完成后关闭连接Stringhost=...;Stringusername=...;Stringpassword=...;//CreateemptypropertiesPropertiesprops=Properties;//GetsessionSessionsession=Session.getDefaultInstance(props,null);//GetthestoreStorestore=session.getStore(\"pop3\");store.connect(host,username,password);//GetfolderFolderfolder=store.getFolder(\"INBOX\");folder.open(Folder.READ_ONLY);//GetdirectoryMessagemessage=folder.getMessages;for(i=0,n=message.length;i<n;i){.out.prln(i+\":\"+message[i].getFrom[0]+\"\\t\"+message[i].getSubject);}//Closeconnectionfolder.close(false);store.close;每条消息执行何种操作取决于自己决定上面代码块只是显示了消息发送者和主题从技术上讲发送者地址列表可以为空此时getFrom[0]会抛出个异常为了显示整条消息您可以提示用户在看完消息发送者和主题字段后如果想看到消息内容可以再消息writeTo思路方法BufferedReaderreader=BufferedReader(InputStreamReader(.in));//GetdirectoryMessagemessage=folder.getMessages;for(i=0,n=message.length;i<n;i){.out.prln(i+\":\"+message[i].getFrom[0]+\"\\t\"+message[i].getSubject);.out.prln(\"Doyouwanttoreadmessage?\"+\"[YEStoread/QUITtoend]\");Stringline=reader.readLine;(\"YES\".equals(line)){message[i].writeTo(.out);}(\"QUIT\".equals(line)){;}}练习检查邮件删除消息和标志删除消息涉及到操作和消息关联标志对区别状态有区别标志有些标志是系统定义有些则是由用户定义预定义标志都是在内部类Flags.Flag中定义如下所示:?Flags.Flag.ANSWERED?Flags.Flag.DELETED?Flags.Flag.DRAFT?Flags.Flag.FLAGGED?Flags.Flag.RECENT?Flags.Flag.SEEN?ER仅仅标志存在并不表示标志为所有邮件服务器/提供所支持例如除了删除消息外POP协议对它们都不支持检查新邮件不是POP任务但它已内置到邮件客户中要搞清楚什么标志受到支持可以使用getPermanentFlags思路方法来询问文件夹要删除消息需要为消息设置DELETE标志:message.Flag(Flags.Flag.DELETED,true);第次以READ_WRITE(读-写)模式打开文件夹:folder.open(Folder.READ_WRITE);然后处理完了所有消息请关闭文件夹并传递true值以擦去删除消息folder.close(true);用户可使用Folder类expunge思路方法来删除消息但是该思路方法对Sun公司POP3提供不起作用其他提供或许能也或许不能实现其功能它更有可能适用于IMAP提供由于POP只支持对收件箱简单访问使用Sun公司提供时您将不得不关闭文件夹以删除消息要移去标志只需传递个false值给Flag思路方法要看看是否设置了某个标志可以使用isSet进行检查自我验证先前学到是使用Authenticator类以在需要时提示输入用户名和密码而不是以串形式传入它们这里您将真正看到如何更加充分地使用验证不需使用主机、用户名和密码连接到Store您可以配置Properties带有主机并告诉Session有关您自定义Authenticator例子如下所示://SetuppropertiesPropertiesprops=.getProperties;props.put(\"mail.pop3.host\",host);//Setupauthentication,getsessionAuthenticatorauth=PopupAuthenticator;Sessionsession=Session.getDefaultInstance(props,auth);//GetthestoreStorestore=session.getStore(\"pop3\");store.connect;然后您可以使用Authenticator类子类并通过getPasswordAuthentication思路方法返回个PasswordAuthentication对象下面是这种实现个例子其中个字段同时适用于两部分内容它不是个ProjectSwing指南只是在个字段中输入了两部分内容它们是用逗号隔开importjavax.mail.*;importjavax.swing.*;importjava.util.*;publicPopupAuthenticatorextendsAuthenticator{publicPasswordAuthenticationgetPasswordAuthentication{Stringusername,password;Stringresult=JOptionPane.showInputDialog(\"Enter\'username,password\'\");StringTokenizerst=StringTokenizer(result,\",\");username=st.nextToken;password=st.nextToken;PasswordAuthentication(username,password);}}由于PopupAuthenticator依赖于Swing因而将会启动用于AWT事件处理线程这在本质上要求您在代码中添加个对.exit以终止执行回复消息Message类包含个reply思路方法以用正确接收者和主题(添加“Re::”如果没有话)配置条新消息该思路方法不会为消息添加任何内容只是为新接收者复制发送者或回复到报头该思路方法使用个布尔型参数提示是否只回复给发送者(false)或回复给所有人(true)MimeMessagereply=(MimeMessage)message.reply(false);reply.From(InternetAddress(\"president@\"));reply.Text(\"Thanks\");Transport.send(reply);在发送消息时要配置回复到地址可使用ReplyTo思路方法练习回复邮件转发消息转发消息涉及内容要稍微多点没有个专门用于转发消息思路方法您可以通过处理组成消息各个部分来创建要转发消息条邮件消息可由多个部分组成每部分是个BodyPart(报文部分)或更特殊点在操作MIME消息时则是MimeBodyPart区别报文部分组合到个称为Multipart容器中或者又更特殊点是个MimeMultipart容器要转发消息您要创建个用于消息文本部分和用于要转发消息第 2个部分并将这两个部分组合成个multipart(多个部分)然后您可以把这个multipart添加到个合适注明地址消息中并发送它这就是转发消息本质要把条消息内容复制给另条消息只需通过它DataHandler类复制即可它是出自于JavaBeansActivationFramework个类//CreatethemessagetoforwardMessageforward=MimeMessage(session);//Fillinheaderforward.Subject(\"Fwd:\"+message.getSubject);forward.From(InternetAddress(from));forward.addRecipient(Message.RecipientType.TO,InternetAddress(to));//CreateyourmessagepartBodyPartmessageBodyPart=MimeBodyPart;messageBodyPart.Text(\"Hereyougowiththeoriginalmessage:\\n\\n\");//Createamulti-parttocombinethepartsMultipartmultipart=MimeMultipart;multipart.addBodyPart(messageBodyPart);//CreateandfillpartfortheforwardedcontentmessageBodyPart=MimeBodyPart;messageBodyPart.DataHandler(message.getDataHandler);//Addparttomultipartmultipart.addBodyPart(messageBodyPart);//Associatemulti-partwithmessageforward.Content(multipart);//SendmessageTransport.send(forward);操作附件附件是和邮件消息关联资源通常保存在消息的外如:个文本文件电子表格或图片对于像Eudora和Pine的类常用邮件您可以通过JavaMailAPI把资源附加到邮件消息上并在您接收消息时获取附件发送附件发送附件和转发消息非常相似您要创建组成完整消息各个部分在创建好第个部分即消息文本的后您添加用DataHandler类处理其他部分就是您附件而不是转发消息中共享处理当您从个文件读取附件时附件数据资源是FileDataSource;从URL读取时则是URLDataSource旦您有了自己DataSource在将其通过DataHandler思路方法最终附加到BodyPart上的前只需将其传递给DataHandler类构造器即可假定您想保留附件原始文件名要做最后件事就是用BodyPart类FileName思路方法设置和附件关联文件名所有这些操作如下所示://DefinemessageMessagemessage=MimeMessage(session);message.From(InternetAddress(from));message.addRecipient(Message.RecipientType.TO,InternetAddress(to));message.Subject(\"HelloJavaMailAttachment\");//CreatethemessagepartBodyPartmessageBodyPart=MimeBodyPart;//FillthemessagemessageBodyPart.Text(\"PardonIdeas\");Multipartmultipart=MimeMultipart;multipart.addBodyPart(messageBodyPart);//ParttwoisattachmentmessageBodyPart=MimeBodyPart;DataSourcesource=FileDataSource(filename);messageBodyPart.DataHandler(DataHandler(source));messageBodyPart.FileName(filename);multipart.addBodyPart(messageBodyPart);//Putpartsinmessagemessage.Content(multipart);//SendthemessageTransport.send(message);在消息中包含附件时如果您是个servlet您用户就必须上传附件并告诉您要把消息发送到什么位置上传每个文件都可以用个表单来处理该表单是以multipart/表单数据(form-data)来编码<FORMENCTYPE=\"multipart/form-data\"method=postaction=\"/myservlet\"><INPUTTYPE=\"file\"NAME=\"thefile\"><INPUTTYPE=\"submit\"VALUE=\"Upload\"></FORM>注意:消息大小要受到您SMTP服务器限制而不是由JavaMailAPI限制如果出现了问题可以通过设置ms和mx参数来考虑增加Java堆区空间尺寸练习发送附件获取附件从消息中取出附件比发送附件涉及操作要稍微多点而MIME没有简单附件概念当消息带有附件时消息内容就是个Multipart对象然后需要处理各个部分以获取主要内容和附件通过part.getDisposition思路方法标记上Part.ATTACHMENT配置部分显然就是附件同时附件也可以不带有配置(和非文本MIME类型)或Part.INLINE配置当配置是Part.ATTACHMENT或Part.INLINE时您可以脱离该消息部分内容将其保存起来只需通过getFileName思路方法获取原始文件名并通过getInputStream思路方法获取输入流即可Multipartmp=(Multipart)message.getContent;for(i=0,n=multipart.getCount;i<n;i){Partpart=multipart.getBodyPart(i));Stringdisposition=part.getDisposition;((disposition!=null)&&((disposition.equals(Part.ATTACHMENT)||(disposition.equals(Part.INLINE))){saveFile(part.getFileName,part.getInputStream);}}saveFile思路方法只用于根据文件名创建个文件从输入流中读取字节并将它们写入个文件中去如果文件已存在将在文件名后添加个编号直到找到个不存在文件为止//fromsaveFileFilefile=File(filename);for(i=0;file.exists;i){file=File(filename+i);}上面代码介绍了消息各个部分被标上相应标志个最简单例子要想包含所有情况还要对disposition值为null及消息部分为MIME类型情况作相应处理(dispositionnull){//CheckplainMimeBodyPartmbp=(MimeBodyPart)part;(mbp.isMimeType(\"text/plain\")){//Handleplain}{//Specialnon-attachmentshereofimage/g,text/html,...}...}处理HTML消息发送基于HTML消息比发送纯文本消息要稍微复杂点尽管它不需要做大量工作它全部取决于您特定需求发送HTML消息如果您所要做全部工作是发送个等价HTML文件作为消息并让邮件阅读者忧心于取出任何嵌入图片或相关片段那么就可以使用消息Content思路方法以串形式传递消息内容并把内容类型设置为text/html StringhtmlText=\"<H1>Hello</H1>\"+\"<imgsrc=\\\"/images/logo.g\\\">\";message.Content(htmlText,\"text/html\"));在接收端如果您用JavaMailAPI获取消息在该API中没有内置任何用于以HTML格式显示消息功能JavaMailAPI只以字节流形式来查看消息要以HTML格式显示消息您必须使用SwingJeditorPane或某些第3方HTML阅读器组件(message.getContentType.equals(\"text/html\")){Stringcontent=(String)message.getContent;JFrameframe=JFrame;JEditorPanetext=JEditorPane(\"text/html\",content);text.Editable(false);JScrollPanepane=JScrollPane(text);frame.getContentPane.add(pane);frame.Size(300,300);frame.DefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);frame.show;}在消息中包含图片另方面如果您HTML消息中嵌入了作为消息部分图片并且您想保持消息内容完整就必须把图片看作附件并用特殊通信标识符URL引用该图片该通信标识符引用是图片附件内容ID报文嵌入图片处理和附加个文件到消息上非常相似惟区别的处在于:您必须区分MimeMultipart中哪些部分是在构造器(或通过SubType思路方法)通过设置其子类型而使的相关以及将图片内容ID报头设置成任意串它将在img标记中用作图片源路径下面显示了个完整举例:Stringfile=...;//CreatethemessageMessagemessage=MimeMessage(session);//Fillitsheadersmessage.Subject(\"EmbeddedImage\");message.From(InternetAddress(from));message.addRecipient(Message.RecipientType.TO,InternetAddress(to));//CreateyourmessagepartBodyPartmessageBodyPart=MimeBodyPart;StringhtmlText=\"<H1>Hello</H1>\"+\"<imgsrc=\\\"cid:memememe\\\">\";messageBodyPart.Content(htmlText,\"text/html\");//Createarelatedmulti-parttocombinethepartsMimeMultipartmultipart=MimeMultipart(\"related\");multipart.addBodyPart(messageBodyPart);//CreatepartfortheimagemessageBodyPart=MimeBodyPart;//FetchtheimageandassociatetopartDataSourcefds=FileDataSource(file);messageBodyPart.DataHandler(DataHandler(fds));messageBodyPart.Header(\"Content-ID\",\"memememe\");//Addparttomulti-partmultipart.addBodyPart(messageBodyPart);//Associatemulti-partwithmessagemessage.Content(multipart);练习发送带有图片HTML消息用SearchTerm搜索JavaMailAPI包含种可用于创建SearchTerm(搜索条件)筛选机制它可以在javax.mail.search包中找到旦创建了SearchTerm您就可以询问某个文件夹匹配消息并检索出消息对象:SearchTermst=...;Messagemsgs=folder.search(st);有22种区别类可用于帮助创建搜索条件?AND条件(AndTerm类)?OR条件(OrTerm类)?NOT条件(NotTerm类)?SENTDATE条件(SentDateTerm类)?CONTENT条件(BodyTerm类)?HEADER条件(FromTerm/FromStringTerm,RecipientTerm/RecipientStringTerm,SubjectTerm,etc.)本质上您可以为匹配消息创建个逻辑表达式然后进行搜索例如下面显示了条消息条件搜索举例该消息带有(部分带有)个ADV主题串其发送者字段为friend@您可能考虑定期运行该查询并自动删除任何返回消息 SearchTermst=OrTerm(SubjectTerm(\"ADV:\"),FromStringTerm(\"friend@\"));Messagemsgs=folder.search(st);2009-2-12 5:23:11疯狂代码 /。