邮件原理与JavaMail开发中应用的一些重要的类

来源:互联网 发布:webshell检测工具 编辑:程序博客网 时间:2024/06/05 19:56

创建邮件一些基本知识

MIME协议:由于网络的迅猛发展,人们早已经不再满足于电子邮件仅仅是用来交换文本信息,更希望可以使用电子邮件来交换更为丰富多彩的内容,比如说图片。但是,由于这些内容,比如说图片,都是非ASCII码的二进制数据,而我们原来的邮箱格式,只是用于表达纯文本信息,所以要发送这些内容的话,必须先将其进行编码。为了解决这个问题,人们提出了MIME协议。

MIME协议用于定义复杂邮件的格式,它可以表达多段平行的文本内容和非文本内容。例如,在邮件中插入附件。

 

JavaMail API封装在一个名为mail.jar的文件中,它是开发JavaMail应用程序时所必须使用的核心包。

JavaMail API按其功能划分通常可以分为三类:

    创建和解析邮件内容的API。

    发送邮件的API。

    接收邮件的API。

核心类:

1Message:javax.mail.Message是创建和解析邮件的核心类,他的实例代表一封电子邮件。客户端程序发送邮件时,首先使用创建邮件JavaMail API创建出封装了邮件数据的Message对象,然后把这个对象传送给发送API发送。客户端接收邮件时,邮件接收API把收到的邮件数据封装在Message类的实例对象中,客户端程序再使用邮件分析API从这个对象中介析出接收到的邮件数据。

2Transport:javax.mail.Transport类是发送邮件的核心API,他的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP,客户端程序创建好Message对象后,只需要使用邮件发送API得到Transport对象,然后把Message对象传递给Transport对象,并调用它的发送方法,就可以把邮件发送给指定了SMTP服务器。

3 Store:javax.mail.Store类是接收邮件的核心,他的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3。客户端程序接收到邮件时,只需要有事邮件接收API得到Store对象的接收方法,就可以从制定的POP3服务器获得邮件数据,并把这些数据封装带表示邮件的Message的对象中。

4 Session:javax.mail.Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络联接的会话信息,如邮件服务器的主机名,端口号,采用的邮件发送和接收协议等。Session对象根据信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象是提供信息支持。

JAF简介

JAF(JavaBeansActivationFramework,JavaBeans激活框架)是一个专用的数据处理框架,他用于封装数据,并为应用程序提供访问和操作数据的接口。JavaMail API可以利用JAF从某种数据源中读取数据和获知数据的Mime类型,并用这些数据生成MIME消息中的消息体和消息类型。

JAF的主要作用在于让Java应用程序知道如何对一个数据源进行察看,编辑和打印等操作。大家知道,在MS Word程序中可以打开一片Word文档中嵌套的Visio图片,JAF就是要让Java程序能够完成类似的技术应用,让应用程序知道数据源支持哪些操作,每个操作分别调用哪个处理模块。对于通过JAF封装的数据,应用程序通过JAF提供的接口可以完成以下操作:

访问数据源中的数据;

获知数据源的数据类型;

获知可对数据进行的各种操作;

用户对数据执行某种操作时,自动创建执行该操作的软件部件的实例对象。

例如,如果要使用JAF处理一个图片文件,那么应用程序通过JAF提供的接口就可以得到队图片文件进行操作的输入输出流,图片文件的MIME类型,JAF为图片文件提供的操作方法(如查看,毕激活打印图片等等),应用程序调用这些操作时,JAF就会调用相应的处理模块对数据进行处理。

所以要发邮件除了要导mail.jar文件还要导activation.jar文件

创建邮件基本原理

JavaMail API使用javax.mail.Message类来表示一封邮件,Message类是一个抽象类,应用程序需要使用其实现子类java.mail.internet.MimeMessage来创建Message类的实例对象。如果要创建一封致包含文本的简单邮件,那么只需要使用到MimeMessage类就可以了。但如果要创建一封包含内嵌资源的或多个附件的复杂邮件,那么则需要同时使用到JavaMail API中的MimeMessage,javax.mail.internet.MimeBodyPart和javax.mail.internet.MimeMultipart等类。

    MimeMessage类:表示整封邮件。

    MimeBodyPart类:表示邮件的一个MIME消息。

    MimeMultipart类:表示一个由多个MIME消息组合成的MIME消息。

简单的一些说明:

    1 复杂邮件和简单邮件一样,都是使用MimeMessage队向来表示整封邮件的。

    2 对于复杂邮件的邮件体,不能再简单的调用MimeMessage.setText方法生成,而是要用一个MimeMultipart对象表示,并通过MimeMessage.setContent(Multipart mp)方法设置到MimeMessage对象。

    3 MimeMultipart对象用来组合多个MIME消息,其中的每个MIME消息分别用一个MimeMultipart.addBodyPart(BodyPart part)方法加入到MimeMultipart对象中。

    4 如果MimeBodyPart对象表示的MIME消息又是一个MIME组合消息,那么它的内容有需要使用一个MimeMultipart对象来表示,并通过MimeBodyPart.setContent(Multipart mp)方法设置到MimeBodyPart对象中。与代表整封邮件的MimeMultipart对象一样,这个MimeMultipart对象中的每一个组成单元也分别有一个MimeBodyPart对象表示。

 

Message.RecipientType内部类:表示收件人的类型,它是Message中的一个静态类。该类中有如下三个常量:1、 TO:代表邮件的主要接收者。

    2CC:代表邮件的抄送接收者。

    3BCC:代表邮件的暗送接收者。

   setForm方法:用于设置MimeMessage对象中的发件人地址

   setRecipientsetRecipients方法:分别用于设置一个和一组收件人的地址。

   addRecipientaddRecipients方法:分别用于增加一个和一组收件人的地址。

   setSentDate方法:用于设置MimeMessage对象中的邮件发送日期,

        语法格式如下:

   Public abstract void setSentDate(java.util.Date date)

   setSubject方法:用于设置MimeMessage对象中的邮件主题

     注意:如果邮件主题中含有非ASCII码的字符,那么在subject头字段中需要对邮件主题的原始内容进行BASE64 或 Quote-Printable编码。

   addHeadersetHeader方法:用于设置当前的MIME消息的某个消息头信息。

   setContent方法:用于设置MimeMessage队向的邮件体

   setText方法:用于将MIME消息体设置为一个简单的纯文本信息。

   setFlag方法:主要用在邮件接收程序中,用于为邮件设置一个邮件标记,例如删除标记,已读标记等等。

   saveChanges方法:用于更新并保存MimeMessage对象中的数据

   writeTo方法:用于把MimeMessage对象中的数据输出到一个RFC822格式的输出流中

 

一封MIME邮件中的MIME消息可以有三种组合关系:混合,关联,选择。对应的MIME类型如下:

Multipart/mixed:表示消息体中的内容是混合组合类型,可以是文本,声音和附件等不同邮件内容的混合体。

Multipart/related:表示消息体中的内容是关联(依赖)组合类型,表示消息体中的某些内容,依赖另外的资源。

Multipart/alternative:选择组合类型。

 

原创粉丝点击