您的位置:首页 > 编程语言 > Java开发

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

2016-12-26 22:47 246 查看
JavaMail是一套非常简单、易用的API,需要和另一套Java规范JAF(Java
Activation Framework)一起使用。通过JavaMail API可以非常方便地收发邮件。

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

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

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

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

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

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

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

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

POP3和IMAP是目前邮件访问中使用最广泛的标准协议。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);
基本上可以这样理解:Transport和Store都是通过邮件会话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设置内容。
除此之外,该类还提供一系列get和set方法,用来返回和设置该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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: