`

[JavaMail] 详解Multipart和BodyPart

 
阅读更多

转: http://blog.itpub.net/15182208/viewspace-730172/

 

A、简介

 

Message表示一个邮件,messgaes.getContent()返回一个Multipart对象。一个Multipart对象包含一个或多个BodyPart对象,来组成邮件的正文部分(包括附件)。

 

BMultipart

javax.mail.Multipart

    public abstract class Multipart

Multipart是一个容器它转载多个body Part(正文、附件或内嵌资源)。PartgetContent()方法就返回一个Multipart对象。

javax.mail.internet.MimeMultipart

public class MimeMultipart extends Multipart

MimeMultipartMultipart的实现类,默认类别是mixed。其他multipart子类型如:relatedalternative可以通过new MimeMultipart(“alternative”);来实现。

 

B.0Multipartcontent-type

总体来说,MIME消息由消息头和消息体两大部分组成。现在我们关注的是MIME邮件,因此在以下的讨论中姑且称“消息”为“邮件”。

邮件头包含了发件人、收件人、主题、时间、MIME版本、邮件内容的类型等重要信息。每条信息称为一个域,由域名后加“: ”和信息内容构成,可以是一行,较长的也可以占用多行。域的首行必须“顶头”写,即左边不能有空白字符(空格和制表符);续行则必须以空白字符打头,且第一个空白字符不是信息本身固有的,解码时要过滤掉。

邮件体包含邮件的内容,它的类型由邮件头的“Content-Type”域指出。常见的简单类型有text/plain(纯文本)text/html(超文本)。有时也会出现的multipart类型,是MIME邮件的精髓。邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔。常见的multipart类型有三种:multipart/mixed, multipart/relatedmultipart/alternative

multipart/mixed:附件。

multipart/related:内嵌资源。

multipart/alternative:纯文本与超文本共存。

可以看出,如果在邮件中要添加附件,必须定义multipart/mixed段;如果存在内嵌资源,至少要定义multipart/related段;如果纯文本与超文本共存,至少要定义multipart/alternative段。什么是“至少”?举个例子说,如果只有纯文本与超文本正文,那么在邮件头中将类型扩大化,定义为multipart/related,甚至multipart/mixed,都是允许的。

multipart诸类型的共同特征是,在段头指定“boundary”参数字符串,段体内的每个子段以此串定界。所有的子段都以--=_”boundary开始,父段则以--=_”boundary” --结束。段与段之间也以空行分隔。

前文,在邮件体是multipart类型的情况下,邮件体的开始部分(第一个--=_”boundary之前)可以有一些附加的文本行,相当于注释,解码时应忽略。段间也可以有一些附加的文本行,不会显示出来,如果有兴趣,不妨验证一下。

 

B.1javax.mail.Multipart

属性

protected  String   contentType

This field specifies the content-type of this multipart object.

返回Multipartcontent-type类型。类型包括"alternative", "mixed", "related", "parallel", "signed"等。

protected  Part      parent

The Part containing this Multipart, if known.

Part,一般是message

protected  Vector  parts

Vector of BodyPart objects.

方法

1.操作BodyPart

void  addBodyPart(BodyPart part)

Adds a Part to the multipart.

void  addBodyPart(BodyPart part, int index)

Adds a BodyPart at position index.

BodyPart getBodyPart(int index)

Get the specified Part.

boolean    removeBodyPart(BodyPart part)

Remove the specified part from the multipart message.

void  removeBodyPart(int index)

Remove the part at specified location (starting from 0).

2.操作父Part

Part getParent()

Return the Part that contains this Multipart object, or null if not known.

void  setParent(Part parent)

Set the parent of this Multipart to be the specified Part.

3.取得content-type

String        getContentType()

Return the content-type of this Multipart.

4.取得BodyPart数量

int    getCount()

Return the number of enclosed BodyPart objects.

 

B.2javax.mail.internet.MimeMultipart

属性

protected  DataSource ds

The DataSource supplying our InputStream.

protected  boolean        parsed

Have we parsed the data from our InputStream yet? Defaults to true; set to false when our constructor is given a DataSource with an InputStream that we need to parse.

构造函数

MimeMultipart()

Default constructor.

MimeMultipart(DataSource ds)

Constructs a MimeMultipart object and its bodyparts from the given DataSource.

MimeMultipart(String subtype)

Construct a MimeMultipart object of the given subtype.

创建一个指定子类型的MimeMultipart对象。默认为mixed,你可设置relatedalternative等。

方法

1. 操作BodyPart

void  addBodyPart(BodyPart part)

Adds a Part to the multipart.

void  addBodyPart(BodyPart part, int index)

Adds a BodyPart at position index.

BodyPart getBodyPart(int index)

Get the specified BodyPart.

BodyPart getBodyPart(String CID)

Get the MimeBodyPart referred to by the given ContentID (CID).

void  removeBodyPart(int index)

Remove the part at specified location (starting from 0).

2. 操作前文

String        getPreamble()

Get the preamble text, if any, that appears before the first body part of this multipart.

void  setPreamble(String preamble)

Set the preamble text to be included before the first body part.

3.设置子类型

void  setSubType(String subtype)

Set the subtype.

4.

boolean    isComplete()

Return true if the final boundary line for this multipart was seen.

 

CBodyPart

javax.mail.Part

public interface Part

javax.mail.internet. MimePart

public interface MimePart extends Part

javax.mail.BodyPart

public abstract class BodyPart implements Part

BodyPart是一个包含在Multipart中的Part。它是一个Part也包含attributecontent

javax.mail.internet.MimeBodyPart

public class MimeBodyPart extends BodyPart implements MimePart

MimeBodyPartBodyPart的实现类。

javax.mail.internet.PreencodedMimeBodyPart

         public class PreencodedMimeBodyPart extends MimeBodyPart

 

C.1javax.mail.BodyPart

属性

Multipart parent

The Multipart object containing this BodyPart, if known.

这是和message的区别所在,虽然都实现Part接口,但BodyPart是包含在Multipart中的。它的parent(Multipart)message.getContent()

 

C.2javax.mail.internet.MimeBodyPart

属性

protected  byte[]   content

Byte array that holds the bytes of the content of this Part.

一个字节数组存放BodyPart内容的字节流。

protected  InputStream         contentStream

If the data for this body part was supplied by an InputStream that implements the SharedInputStream interface, contentStream is another such stream representing the content of this body part.

BodyPart的数据提供一个InputStreamcontentStream是另一种流代表BodyPart的内容。

protected  DataHandler        dh

The DataHandler object representing this Part's content.

代表BodyPart内容的DataHandler对象。

protected  InternetHeaders headers

The InternetHeaders object that stores all the headers of this body part.

InternetHeaders 对象存放所有BodyPart的标题。

构造函数

MimeBodyPart()

An empty MimeBodyPart object is created.

创建一个空的MimeBodyPart对象。

MimeBodyPart(InputStream is)

Constructs a MimeBodyPart by reading and parsing the data from the specified input stream.

MimeBodyPart(InternetHeaders headers, byte[] content)

Constructs a MimeBodyPart using the given header and content bytes.

方法

1.操作附件

DataHandler

DataHandler    getDataHandler()

Return a DataHandler for this body part's content.

void  setDataHandler(DataHandler dh)

This method provides the mechanism to set this body part's content.

2.操作附件名

void  setFileName(String filename)

Set the filename associated with this body part, if possible.

设置了附件名称则会在邮件BodyPart头中增加一行表示附件的代码Content-Disposition: attachment; filename=xxxx.xls

String        getFileName()

Get the filename associated with this body part.

获取Content-Disposition: attachment; filename=xxxx.xls中的filename

3.操作正文

void  setText(String text)

Convenience method that sets the given String as this part's content, with a MIME type of "text/plain".

void  setText(String text, String charset)

Convenience method that sets the given String as this part's content, with a MIME type of "text/plain" and the specified charset.

void  setText(String text, String charset, String subtype)

Convenience method that sets the given String as this part's content, with a primary MIME type of "text" and the specified MIME subtype.

以上三个方法都是用于设置MimeBodyPart的内容(文本内容)的,不同之处在于是否设置指定的字符或指定的MIME类型。

 

分享到:
评论

相关推荐

    javaMail详解

    JavaMail API详解将深入探讨这些关键概念和技术。 1. **JavaMail API概述**: JavaMail API是Java平台上的标准邮件服务接口,由Java Community Process(JCP)定义为JSR 54。它允许开发者在应用程序中发送、接收和...

    JavaMail详解

    - 通过 `Multipart` 类可以创建包含文本、图像、音频或其他文件类型的复杂邮件,使用 `BodyPart` 来添加各个部分。 - `MimeMultipart` 类是实现多部分消息的常见方式,特别适合处理包含HTML、文本和附件的邮件。 ...

    [JavaMail]8详解Message和MIME.docx

    【JavaMail】与MIME详解 JavaMail是一个Java库,用于处理电子邮件的发送和接收,它广泛应用于企业级应用程序和服务器端开发。在JavaMail中,MIME(Multipurpose Internet Mail Extensions)扮演着核心角色,因为它...

    JavaMail+JAF+JavaMail_API+JavaMail_API详解

    总的来说,这个压缩包提供了一整套的JavaMail开发资源,包括最新的JavaMail库、JAF组件、详细的API文档(英文和中文),以及一个可能的中文详解。对于想要在Java环境中开发邮件功能的开发者来说,这是一个非常全面的...

    JavaMail API详解.txt

    ### JavaMail API详解 #### 一、概述与背景 JavaMail API是用于处理电子邮件的一组标准接口,它为开发人员提供了强大的邮件收发能力。JavaMail API不仅支持常见的邮件协议如SMTP(简单邮件传输协议)、POP3(邮局...

    基于JMS(Java Messaging Service)开发JAVAMAIL详解

    首先,我们需要理解JMS和JAVAMAIL这两个技术在Java开发中的作用。 JMS,全称为Java Messaging Service,是Java平台上的标准接口,用于在分布式环境中交换异步消息。它提供了一种可靠的、高效的消息传递机制,使得...

    JavaMail(JAVA邮件服务) API详解

    `Multipart`类是一个容器,可以容纳多个`Part`,如`BodyPart`,它们可以是文本、图像、附件或其他`Multipart`。`MimeMultipart`是`Multipart`的一个实现,用于处理MIME格式的邮件,这是互联网上最常用的邮件格式。 ...

    JavaMail邮件开发详解

    ### JavaMail邮件开发详解 #### 一、JavaMail API简介 JavaMail API 是一个用于读取、撰写和发送电子邮件的强大工具包。它主要用于构建邮件用户代理程序(Mail User Agent,简称 MUA),这类程序通常包括像 Eudora...

    JavaMail API详解.doc

    JavaMail API 详解 JavaMail API 是一款功能强大且灵活的电子邮件处理API,允许开发者建立电子邮件客户端程序,例如Eudora、Foxmail、MS Outlook Express等。JavaMail API 的主要特点是它可以与各种电子邮件协议...

    JavaMail API详解.htm

    一、JavaMail API简介 JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook ...JavaMail API被设计用于以不依赖协议的方式去发送和接收电子信息,这个API被分为两大部分:

    JavaMail API详解

    JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。而不是像sendmail或者其它的邮件传输代理(Mail ...

    JavaMail(JAVA邮件服务器)API详解 chm.rar

    JavaMail是Java编程环境中用于处理电子邮件的一套API,它提供了丰富的功能,允许开发者发送、接收、存储和管理邮件。在JavaMail API详解的资源中,我们可以深入理解这一强大的工具。 首先,JavaMail API简介部分会...

    javamail API详解,帮助文档,源码

    提供的“javamail源码详解”和“开发手册”是理解JavaMail API的重要参考资料。通过阅读源码,可以深入了解其实现原理;开发手册则提供了详尽的API使用示例和教程,帮助开发者快速上手。 总结,JavaMail API是Java...

    JavaMail发邮件所需的jar包

    例如,添加附件可以通过Multipart和BodyPart类实现: ```java MimeMultipart multipart = new MimeMultipart(); BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("邮件正文"); multipart....

    javamail1.4.5和javax.mail-1.5.5.jar

    5. **Multipart** 和 **BodyPart**:用于处理多部分邮件,如包含文本和图片的邮件。Multipart是一个容器,可以包含多个BodyPart。 6. **Address** 类族:表示邮件地址,包括InternetAddress(用于电子邮件地址)和...

    javamail的jar包

    JavaMail 是一个开源的 Java 库,用于在 Java 应用程序中实现电子邮件的发送和接收。这个库提供了丰富的 API,使得开发者可以方便地处理 SMTP、POP3 和 IMAP 协议,从而实现电子邮件的全面功能。在项目中集成 ...

    JavaMail基础教程(API)

    JavaMail API是Java平台上处理邮件的核心库,它包含了多个接口和类,如`Session`, `Message`, `Multipart`和`Address`等,这些都为创建和操作邮件提供了便利。JavaMail遵循SMTP(Simple Mail Transfer Protocol)和...

Global site tag (gtag.js) - Google Analytics