`
sharp2wing
  • 浏览: 271905 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

JavaMail类介绍(转)

阅读更多
JavaMail的三个主要类:
1、Session类
Session 类表示了一个基本的邮件会话过程,它提供了一个邮件的生存过程。Session对象需要java.util.Properties对象对其配置邮件环境属性,它利用Properties对象来获取诸如邮件服务器、用户名、密码等信息,以及其他可在整个应用程序中共享的信息。


2、Message类
在创建了一个邮件会话Session后,再用Message类提供了一封邮件的所有信息。它是一个抽象类,必须由其子类来构造。
MimeMessage message=new MimeMessage(sendsession);
//MimeMessage是Message的子类,可以使用当前的Session对象创建一个新的MimeMessage对象,然后就可以对其进行各种操作。
message.setSubject("This is subject of the e-mail");
//设置邮件的标题
message.setText("Hello,I am a e-mail");
//设置纯文本邮件的内容
InternetAddress sender=new InternetAddress("yuncsoft@yahoo.com.cn");
//InternetAddress类通过一个合法的e-mail构造出e-mail地址对象
message.setForm(sender);
//设置邮件的发送方地址
InternetAddress receiver=new InternetAddress("yuncsoft@yahoo.com.cn");
message.addRecipient(receiver,RecipientType.TO);
//设置接收方地址
设置接收方地址使用addRecipient方法,地址类型有三种:
RecipientType.TO:e-mail的发送地址;
RecipientType.CC:抄送地址,可以为多个;
RecipientType.BCC:暗送地址,可以为多个。

3、Transport类
邮件发送类。
邮件发送方法:send(message);

e.g
Properties props=new Properties();
Session sendsession = Session.getInstance(props, null);
//使用getInstance方法获取到这个信息
props.put("mail.smtp.host", "smtp.163.com");
//向属性中写入SMTP服务器的地址,为Session设置一个SMTP邮件服务器
props.put("mail.smtp.auth","true");
//用Properties对象的put方法设置了SMTP邮件服务器需要进行权限的认证;
sendsession.setDebug(true);
//用Session对象的setDebug方法设置输出发送邮件时的调试信息;可在Tomcat服务器上看到同SMTP邮件服务器交互过程中的输出信息。
MimeMessage message=new MimeMessage(sendsession);
//MimeMessage是Message的子类,可以使用当前的Session对象创建一个新的MimeMessage对象,然后就可以对其进行各种操作。
message.setFrom(new InternetAddress(request.getParameter("from")));
//设置发信人地址
message.setRecipient(Message.RecipientType.TO,new InternetAddress(request.getParameter("to")));
//设置收信人地址
message.setSubject(new String(request.getParameter("subject").getBytes("ISO8859_1"),"GBK"));
//设置e-mail标题
message.setSentDate(new Date());
//设置e-mail发送时间
message.setText(new String(request.getParameter("text").getBytes("ISO8859_1"),"GBK"));
//设置e-mail内容
message.saveChanges();
//保存对于Email的修改,用message对象的saveChanges方法将邮件信息保存起来;
Transport transport=sendsession.getTransport("smtp");
//由当前的session对象使用方法getTransport创建并初始化Transport对象
transport.connect("smtp.163.com","username","password");
//连接到SMTP服务器
transport.sendMessage(message,message.getAllRecipients());
//发送e-mail
transport.close();
//关闭Transport连接

发送带有附件的邮件:
1、BodyPart类
BodyPart类表示多部分的MIME信息中某一个部分的信息内容,它是一个抽象类,需要用其子类MimeBodyPart创建。
BodyPart messageBodyPart=new MimeBodyPart();
通常邮件的正文是一个BodyPart对象,附件则是另一个BodyPart对象。

2、MultiPart类
MultiPart类表示多部分的MIME信息的内容,它是一个抽象类,需要用其子类MimeMultipart来创建。还可以通过其方法addBodyPart()来创建。
Multipart multipart=new MimeMultipart();
将代表邮件正文的BodyPart对象和代表邮件附件的BodyPart对象分别加入到MimeMultipart对象中。

3、DataSource类
DataSource类表示本地文件和服务器可以直接访问的资源,它是一个抽象类,用其子类FileDataSource来创建。
FileDataSource fds=new FileDataSource("c:/test.doc");

4、DataHandler类
DataHandler为不同的数据源和数据格式提供提供了一个统一的接口。
messageBodyPart.setDataHandler(new DataHandler(fds));
附件被封装到一个DataHandler对象,BodyPart对象可以用方法setDataHandler将封装了附件的DataHandler对象加进来。

发送附件时的处理过程:
BodyPart messageBodyPart=new MimeBodyPart();
Multipart multipart=new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
//在要发送附件时,先建立代表邮件正文的BodyPart对象,并把它加到Multipart对象中去
messageBodyPart=new MimeBodyPart();
//建立代表邮件附件部分的BodyPart对象
DataSource source=new FileDataSource(attachment);
messageBodyPart.setDataHandler(new DataHandler(source));
用setDataHandler方法将获取到的附件包含进来
messageBodyPart.setFileName(attachment);
//设置附件文件名
multipart.addBodyPart(messageBodyPart);
//将与附件相关的内容设置好之后,就可以把代表此附件部分的BodyPart对象加到Multipart对象中去了,最后将Multipart对象放到代表邮件信息的Message对象中,这样就可以发送带有附件的邮件了。


接收邮件:
1、URLName类
URLName类实际上是对于某台邮件服务器上某个用户的一次操作的唯一标识,它的格式为:
协议名称://用户名:密码@邮件服务器/
URLName irln=new URLName("pop3://username:password@163.com/");

2、Store类
Store类是用于接收邮件的类,它对邮件进行读、写、监视、查找等操作。接收邮件时首先要连接到邮件服务器上的一个邮箱,这需要调用Session对象的getStore方法来创建一个Store对象。
Store store=session.getStore("pop3");
//这个方法要设置Store对象所使用的协议,通常为POP3;
store.connect("pop.163.com","username","password");
//在创建了Store对象之后,可以使用它的connect方法连接到远程邮件服务器中的邮箱。

3、Folder类
在连接到邮箱之后,就可以打开包含邮件的消息文件夹了,打开消息文件夹需要先使用Store对象的getFolder方法创建一个Folder对象作为消息文件夹。
Folder folder=store.getFolder("INBOX");
//参数用来设置消息文件夹的名字,通常设为INBOX,因为POP3协议只支持唯一的消息文件夹INBOX。
使用Folder类的open方法来打开消息文件夹:
folder.open(Folder.READ_ONLY);
它有两种可选模式:READ_ONLY和READ_WRITE
要从消息文件夹中取出邮件,可以使用Folder类的getMessage方法或getMessages方法。
Message message=inbox.getMessage(i);
//方法getMessage返回以其参数为索引的Message对象
Message message[]=folder.getMessages();
//方法getMessages返回一个Message对象数组
int count=folder.getMessageCount();
//使用Folder类的getMessageCount()得到消息文件夹中的邮件总数

4、Message类
与前面的Message类相同,在这里介绍它在显示邮件列表和删除邮件时所使用的一些方法。
(1)、方法getSubject得到一封邮件的标题;
(2)、方法isSet用来判断一封邮件是否被标记为删除(DELETED)、是否用户已经收取过(SEEN)、是否被回复过(ANSWERED)、是否是一个草稿(DRAFT)等等;
(3)、方法setFlag设置一封邮件为待删除。

在接收和检索邮件之后,还要关闭程序使用到的资源,
folder.close(true);
store.cloase();
这两个方法关闭收件箱和到邮件服务器的连接。


显示邮件详细信息的Message类的方法:
1、Address[] getFrom():得到发件人的地址,返回一个Address类的对象数组;
2、Address[] getRecipients(Message.RecipientType.TO):得到收件人的地址列表;
3、Address[] getSubject():得到邮件标题
4、Address[] getContent():得到普通文本邮件的详细内容;
5、Date getSentDate():得到邮件发送的时间;
6、Date getReceivedDate():得到接受邮件的时间;
7、Boolean isMimeType("text/plain"):判断邮件的MIME(多用途的Internet邮件扩展)类型;
Address类是邮件的地址,它是一个抽象类,可以由其子类InternetAddress来实现。

接收带附件的邮件:
先用Message对象的isMimeType方法判断该邮件是否是一个多部分内容的邮件:
if(message.isMimeType("multipart/*"))
如果是的话,就表明该邮件带有附件,这是可以用Message对象的getContent方法获得代表该邮件的多部分内容的Multipart对象:
Multipart multipart=(Multipart)message.getContent();
然后依次获取Multipart对象的每个部分,并用方法getDisposition获得该部分的属性:
Part p=multipart.getBodypart(i);
String disposition=p.getDisposition();
如果该部分的属性是Part.ATTACHMENT或Part.INLINE,就表明它是附件的内容;如果该部分的属性为null,就表明它是普通文本的内容,在对属性进行判断之后,就可以进行相应的处理了:
if((disposition!=null)&&(disposition.equals(Part.ATTACHMENT)||disposition.equals(Part.INLINE)))
{
........
}
else if(disposition==null)
{
if(p.isMimeType("text/plain"))
{
.....
}
}

下载附件的处理:
先设置附件的类型属性,并生成下载的头信息:
response.setContentType(p.getContentType());
response.setHeader("Content-Disposition","attachment;filename=\""+p.getFileName()+"\"");
然后设置下载过程中的输入流和输出流,为下载附件做好准备工作:
OutputStream os=response.getOutputStream();
InputStream is=p.getInputStream();
最后就可以执行下载的操作了:
int c=is.read();
while(c!=-1)
{
os.write(c);
c=is.read();
}


邮件过滤:
要对邮件进行过滤,需要先查找出所有符合过滤条件的邮件,然后对这些邮件设置待删除标记,最后在关闭消息文件夹时真正删除它们。JavaMail提供了一个包javax.mail.search专门用来查找符合条件的邮件,因此可以这样来实现对邮件的过滤:
建立一个SearchTerm对象,它是一个抽象类,需要用其子类来构造,常用的有以下这些子类,这些字类的构造方法中参数就是过滤的规则,满足这些规则的邮件将被过滤掉。
AndTerm:查找同时满足多个条件的邮件;
OrTerm:只要邮件满足多个条件中的某一个条件,就查找出来;
NotTerm:查找不满足条件的邮件;
SentDateTerm:查找某个特定时间发送出来的邮件;
BodyTerm:查找正文部分的内容符合条件的邮件;
SubjectTerm:查找标题部分内容符合条件的邮件;
FromTerm:如果邮件的发件人地址头满足条件,就查找出来;
FromStringTerm:如果邮件发件人的地址字符串满足条件,就查找出来;
RecipientTerm:如果邮件的收件人地址头满足条件,就查找出来;
RecipientStringTerm:如果邮件收件人的地址字符串满足条件,就查找出来
例如:要设立这样的一个过滤规则,凡是标题中含有“惊喜”的邮件或者是由yuncsoft@yahoo.com.cn发送过来的邮件都将被过滤。
SearchTerm st=new OrTerm(new SubjectTerm("惊喜"),new FromStringTerm("yuncsoft@yahoo.com.cn"));
//建立SearchTerm对象;
Message[] message=folder.search(st);
//设立了过滤规则之后,调用Folder对象的search方法在接收到的邮件中寻找符合过滤条件的邮件;并将它们作为Message的对象数组返回;
message.setflsg(Flags.Flag.DELETED,true);
//将过滤出的所有邮件设置删除标志
分享到:
评论

相关推荐

    JavaMail介绍.pdf

    2. **`javax.mail`**:定义了 JavaMail API 的核心接口和类。 3. **`javax.mail.event`**:定义了事件模型。 4. **`javax.mail.internet`**:定义了与 Internet 邮件相关的类和接口。 5. **`javax.mail.search`**:...

    JavaMail开发手册

    JavaMail 开发手册会详细介绍以上所有内容,并提供示例代码帮助开发者理解和应用。通过深入学习,开发者可以实现复杂的邮件服务,如自动回复、邮件订阅、邮件通知等,广泛应用于企业级应用和自动化任务中。

    基于JavaMail的常用类详细介绍

    以下是基于JavaMail的常用类的详细说明: 1. **javax.mail.Properties** 类: Properties 类是配置JavaMail会话的关键。它是一个键值对的集合,用于设置邮件服务器的相关参数,例如SMTP主机名。例如,`props.put(...

    code_java.rar_base64_chosehhs_javamail_下载_表单

    在JavaMail中,`javax.mail.Session`对象用于配置邮件服务器的信息,`Message`类表示邮件实体,`Transport`类负责发送邮件。创建一封邮件通常包括设置发件人、收件人、主题和正文,以及添加附件等步骤。JavaMail还...

    常用jar包,ant/fileupload/io/javamail/jdbc

    本文将详细介绍标题和描述中提到的几个关键知识点:Ant、FileUpload、IO、JavaMail以及JDBC。 1. Ant:Apache Ant是Java的一个构建工具,它以XML格式定义项目构建规则。开发者可以使用Ant进行编译、打包、测试等...

    Apache Commons 工具类介绍及简单使用 (2).pdf

    Apache Commons 工具类介绍及简单使用 Apache Commons 是一个开源的 Java 库,提供了许多实用的工具类,帮助开发者快速构建 Java 应用程序。本文将对 Apache Commons 工具类进行介绍,并提供简单的使用示例。 ...

    31个java工具类大汇总

    以上只是对每个知识点的简要介绍,实际上每个工具类都包含大量实用的方法,可以应对各种场景。在实际开发中,掌握并灵活运用这些工具类,能够显著提高开发效率,减少代码量,增强代码的可读性和可维护性。

    传智播客张孝祥Java邮件开发学习笔记

    3. JavaMail API的介绍 JavaMail是Java中处理邮件发送和接收的API,其体系结构包括API分类以及JavaBeans Activation Framework(JAF),后者用于处理数据类型和转换等问题。利用JavaMail API,开发人员可以编写Java...

    java邮件系统设计.pdf

    JavaMail API提供了一套丰富的接口和类,方便开发者在Java环境中实现复杂的邮件功能。通过理解上述知识点,开发者可以构建出可靠的邮件处理系统,并利用Java的强大功能,结合邮件服务器和邮件客户端,以满足不同业务...

    java常用工具类 Date日期、Mail邮件工具类

    本文将详细介绍 Java 常用工具类,包括 Date 日期和 Mail 邮件工具类的实现和应用。 Date 日期工具类 Date 日期工具类是 Java 中的一个基本工具类,提供了对日期和时间的操作和格式化。DateHelper 类是 Date 日期...

    (javamain 14.2+activation+mail+jaf-1_1_1 ) jar包

    这个jar包可能是针对JavaMail 1.4.2版本的一个特定实现或者增强,可能包含了一些额外的实用工具类或配置,以简化邮件处理的流程。具体的功能需要查看源代码或文档才能明确。 6. **使用示例**: - 发送邮件:首先...

    Java查询OutLook邮件代码

    JavaMail API中的`MimeMessage` 类支持处理MIME类型的邮件。通过 `MimeMultipart` 类,我们可以解析邮件的多个部分,包括正文和附件。 7. **处理附件**: 如果邮件有附件,`MimeBodyPart` 类可以帮助我们获取和...

    java学习文档

    本文档主要介绍了如何使用JavaMail API发送HTML邮件。JavaMail是一个强大的开源库,允许开发者在Java应用程序中实现电子邮件的发送和接收。在本示例中,我们看到一个简单的HTML表单用于收集用户输入的邮件信息,如...

    100 Recipes for Programming Jav - Jamie Munro

    - **解释**: 介绍了如何使用Java中的Date类和SimpleDateFormat类来进行日期时间的转换。这包括日期转字符串、字符串转日期的操作。 ##### 食谱21: 获取当前日期时间 - **知识点**: 日期时间获取、API使用。 - **...

    spring整合freemarker发送邮件例子

    本文将详细介绍如何使用Spring整合Freemarker和JavaMail API来实现发送带有HTML内容、内嵌图片和附件的邮件,并解决可能出现的乱码问题。 首先,我们需要在Spring的配置文件中配置邮件服务。这通常涉及到以下几步:...

    介绍J2EE常用Jar包的含义.doc

    - **用途**: 与JavaMail相关的库,主要负责邮件的数据源和类型管理等。通常与`mail.jar`一起使用。 - **应用场景**: 在需要发送或接收邮件的应用程序中,如订单确认邮件、用户注册确认邮件等场景。 2. **ajaxtags...

    java_practical_guide.rar_practical java

    10. **JVM内部机制**:简要介绍Java虚拟机的工作原理,包括内存模型、类加载机制和垃圾回收。 11. **Java EE相关**:虽然可能不包含太深入的内容,但可能会涉及到Servlet、JSP和JavaMail等Web开发基础。 12. **...

    TongWeb5.0.1.1用户使用手册

    - **4.3.1 JavaMail介绍**: JavaMail是一种用于发送和接收电子邮件的标准API。 - **4.3.2 TongWeb5.0中的JavaMail**: 提供了创建和管理JavaMail资源的功能。 - **4.3.3 JavaMail资源的使用**: 包括配置邮件服务器、...

    (超赞)JAVA精华之--深入JAVA API

    - 不依赖于外部类实例的内部类被称为静态嵌套类。 - **在外部类中定义内部类** - 这种内部类可以访问外部类的成员,但反过来不行。 - **在方法中定义内部类** - 只在该方法内部有效。 - **匿名内部类** - ...

Global site tag (gtag.js) - Google Analytics