【JavaEE】经典JAVA EE企业应用实战-读书笔记6

来源:互联网 发布:帝王蟹雪蟹差别 知乎 编辑:程序博客网 时间:2024/06/07 12:22

JavaMail是一套非常简单、易用的API,需要和另一套Java规范JAFJava Activation Framework)一起使用。通过JavaMail API可以非常方便地收发邮件。

SMTPSimple Mail Transaction Protocol的缩写,即简单邮件传输协议。

SMTP是基于文本的传输协议,在其上指定了一条消息的多个接收者,然后开始传输消息文本。可以很简单地通过telnet来测试一个SMTP服务器。使用的默认端口是25.要将一个域名定位到SMTP服务器,需要使用MXMail eXchangeDNS

文件PFC 821规定了该协议的所有细节。SMTP工作在两种情况下:一是电子邮件从客户端传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP是个请求/相应协议,命令和相应都是基于ASCII文本的,并以CRLF符结束。相应包括一个表示返回状态的3位数字代码。

协议的过程很简单,一个客户端向服务器发送命令,服务器向客户端返回一些信息。客户端发送的命令以及服务器的回应都是字符串。

POPPost Office Protocol的缩写,也就是所谓的“邮局协议”,适用于CS结构的电子邮件协议。目前发展到第三版,称为POP3。是一种传输协议,该协议定义如何将客户端连接到邮件服务器并下载电子邮件。POP3Internet电子邮件的第一个离线协议标准,允许客户从服务器上把邮件存储到本地主机,同时删除保存在邮件服务器上的邮件。POP3服务器则是遵循POP3协议的邮件接收服务器,用来接收并保存电子邮件。

POP3服务器的默认端口是110。当客户端需要使用该服务时,应先与服务器建立TCP连接。一旦连接建立,POP3服务器向客户端发送一条欢迎消息。客户端开始给服务器发送命令,服务器则给出相应的回答。

POP3的命令由一个关键词或者关键词加参数组成,每个命令以回车换行(0xD0xA)作为结束标志。对于所有的命令,POP3服务器都会提供一个回答,服务器的回答由一个状态标识加一些附加信息组成。目前使用的两个标志是“+OK”和“-ERR”,分别表示客户的命令是否合法。所有的回答以回车换行结束。

IMAPInternet Message Access Protocol的缩写,也就是“交互邮件访问协议”,也是一个从本地哟见客户端访问远程服务器上邮件的协议。

POP3IMAP是目前邮件访问中使用最广泛的标准协议。IMAP现在的版本是IMAP4

POP3协议允许用户从服务器上把邮件下载到本地,同时删除保存在服务器上的邮件,从而是用户不必长时间与服务器连接,这在很大程度上减少了服务器和网络的开销。在整个收信过程中,用户无法知道邮件的具体信息,只能先将他们下载到本地。

POP3不同,IMAP4克服了这些缺陷,提供了3中模式

1)在线模式:邮件信息保留在服务器端,客户端可以对其进行查看、管理。其使用方式像网页登录邮箱一样。

2)离线方式:邮件下载到本地,与POP协议一样。

3)分离方式:邮件信息的一部分在邮件服务器,另一部分在客户端。

 

JavaMail的常用API

1)javax.mail.Session

Session类代表JavaMail中的一次邮件会话。每个基于JavaMail的应用至少会产生一次会话,也可以产生多次会话。下面的两个方法是创建邮件会话的常用方法。

Session.getDefaultInstance(Properties props);

Session.getDefaultInstance(Properties props,Authenticator a);

2)javax.mail.Transport

JavaMail使用Transport完成邮件的发送。Transport包含静态方法send,通过以下方法完成邮件的发送

Transport.send(MimeMessage msg)

Transport类有一个直接子类:com.sun.mai..smtp.SMTPTransport,这个子类实现了Transport抽象类,代表使用SMTP协议来发送邮件的具体实现类。此外Transport也包含如下方法

sendMessage(Message msg,Address[] addresses):将msg对象发送到多个地址。

3)javax.mail.Store

该类实现特定邮件协议上的读、写、监视、查找等操作。通过该类可以访问javax.mail.Folder类。

Store store=session.getStore(String protocol)

store.connect(popserver,username,password);

基本上可以这样理解:TransportStore都是通过邮件会话Session来产生的,功能是相对的,Transport用于发送邮件,Store用于接收邮件。

4)javax.mail.Folder

Folder用于分级组织邮件,代表邮件系统的一个文件夹。Folder对象通常由Store对象创建。

Folder folder=store.getFolder(“INBOX”);

folder.open(Folder.READ_ONLY);

5)javax.mail.MimeMessage

该对象是实际的电子邮件对象,创建改对象时应传入一个邮件会话参数。该类采用InternetHeaders类来解析和保存E-mail的顶级RFC 822文件头。

包含如下属性

protected byte[] content:该E-mail内容的字节数组

protected InternetHeaders headers:返回保存该E-mail文件头的对象。

包含如下方法

void addFrom(Address[] addresses):为该E-mail设置发件人地址。

void addHeader(String name,String value):在name的文件头的内容上加上value

void addRecipients(Message.RecipientType type,Address[] address):该方法还有一个重载的方法,都是增加指定类型的收件地址。

Address[] getFrom():返回该E-mail的发件人地址列表。

void setContent(Multipart mp):为该E-mail设置内容。

除此之外,该类还提供一系列getset方法,用来返回和设置该MimeMessage的属性和内容。

Message newMessage=new MimeMessage(Session sendMailSession);

6)javax.mail.Address

该对象用于确定发件人、收件人地址。和Message一样是个抽象类,实际使用它的子类:javax.mail.Internet.InternetAddress

InternetAddress from=new InternetAddress(String address);

7)javax.mail.Multipart

该类时用于保存电子邮件内容的容器,定义了增加和删除、获得电子邮件内容的方法。是个抽象类,通常使用其子类:javax.mail.Internet.MimiMultipart来完成。

MimeMultipart multipart=new MimeMultipart();

使用MimeMultipart对象的另一个方法是addBodyPart(),在内容里添加BodyPart对象,一个邮件信息可以有很多部分,每个BodyPart可以代表一个部分。

8)javax.mail.BodyPart

抽象类。该类代表邮件内容的一个部分,即可以代表正文也可以代表一个附件。使用其子类:javax.mail.Internet.MimeBodyPart。每个MimeBodyPart被认为有两个部分,

MIME类型

匹配这个类型的内容

MimeBodyPart mdp=new MimeBodyPart();

String text=”Hello JavaMail”;

mdp.setContent(text,”text/plain”);

9)javax.activation.DataHandler

使用该类允许邮件信息包含非文本的BodyPart对象

DataHandler dh=new DataHandler(DataSource file);

mdp.setDatahandler(dh);

10)javax.activation.FileDataSource

该类代表本地文件和服务器可以直接访问的资源,一个本地文件可以通过MimeBodyPart对象附加在mimiMessage对象上。

FileDataSource fds=new FileDataSource(“c:/exam.txt”);

11)javax.activation.URLDataSource

代表一个远程资源,类似于FileDataSource

0 0