您的当前位置:首页正文

读书笔记《Java邮件开发详解》

2020-08-12 来源:钮旅网


读书笔记《Java邮件开发详解》

DNS

MX

自动回复 不填from 避免循环回复。

Pop3:可以查邮件总数、已占空间。

电子邮件的RFC822格式:

Return-Path:代表邮件的回复地址,该字段的内容由接收邮件的SMTP服务器填写,接收邮件的SMTP服务器从邮件发送程序发出的mail form命令中获得内容。

Received:通常格式是:Received from A by B for C ,A为发送方,B为接收方,C为收件人的邮箱地址。常常被用来追踪邮件传输的路线和分析邮件的来源。

From:

To:

Subject:

Date:

Cc:

Bcc:

邮件的头字段可以扩充成MIME类型。Content-Type: multipart/mixed;头字段指定编码方法。另外,也定义了邮件头字段的内涵。

MIME消息的头字段具体资源的数据类型和组合消息的组合关系,都是通过消息头中的Content-Type头字段来指定的,格式为“主类型/子类型”的形式出现,主类型有text、image、audio、application、multipart、message等;每个主类型下面又都有好多子类型。

MIME消息可以有三种组合关系:

Multipart/mixed 混合组合 内容可以是文本、附件等等。

Multipart/related 关联组合 如邮件正文要使用HTML代码引用内嵌的图片资源。意思是说某些资源要关联引用另外的资源。

Multipart/alternative 选择组合

这三种关系是可以随意嵌套的,比如你寄一个复杂的盒子出去,这个盒子里面可以有好多好多小盒子,而每个盒子都可以看作一个MIME。

其他的头字段都是顾名思义的,略!

设置内容的另一种方法:

setContent(Object object, String type)

setContent(body, “text/html;charset=gb2312”);

另外一种客户端的发信方式:SMTP服务器功能的邮件发送程序

具有SMTP服务器功能的邮件发送程序会根据收件人地址的域名,直接连接到该域的SMTP服务器和进行邮件发送。根本用不到……

JNDI:命名式:把对象绑定到context中;目录式:保存对象的属性信息

实际应用中命名式和对象式常常结合使用。

Tomcat可以通过配置文件自己创建javax.mail.Session

META-INF/context.xml

auth=”Container”

type=”javax.mail.Session”

mail.smtp.host=”smtp.sina.com.cn”

mail.transport.protool=”smtp”

mail.smtp.auth=”true” />

在web.xml中说明一下,有资源是被tomcat创建的,如果换了别的应用服务器也要创建。

mail/Session

javax.mail.Session

Container

不知道书上为什么费那么大劲找个Session出来,还是个没有校验的Session,收发邮件时都得再写用户名密码给服务器。为什么不随便new一个或者从System中调一个呢?感觉基本用不着,我自己写一个properties文件岂不是更好?

JAF

对于通过JAF封装的数据,应用程序通过JAF提供的接口可以完成如下功能:

。访问数据源中的数据

。获知数据源的数据类型

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

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

好像是用来封装数据源的(比如:声音文件,java文件),这样的好处是?可以识别文件类型对文件直接操作?不知道,回头再看看。好像是附件用的,ms。

邮件搜索

用于创建逻辑组合关系的类AND、OR、NOT、Comparison

用于创建具体搜索条件的类DATE、CONTENT、HEADER

例:SearchTerm st = new AndTerm(new FromStringTerm(“zx@sina.com”),

new ReceivedDateTerm(ComparisonTerm.EQ, new Date()));

这里主要说明ComparisonTerm类,常用于日期类的比较其中使用留个常量来标识六种不同的操作:EQ(=)、GE(>=)、GT(>)、LE(<=)、LT(<)、NE(!=)

邮件的解析与显示

如果Message的类型是“text/*”直接显示之。如果Message的类型

(getContentType())是“multipart/mixed”,调getContent()方法得到Multipart,对其调getCount()看看其中有多少个BodyPart,遍历之;当MIME类型为“text/*”显示之,当MIME是图片、声音或附件等二进制时,调getDataHandler方法得到封装数据的对象,然后调其getInputSteam…….;当MIME类型为“mutlipart/mixed”再次遍历得到其中的BodyPart。

注意:Message.isMimeType(“multipart/*”)这个方法居然可以写通配附?!看看API的解释:If the subType of mimeType is the special character '*', then the subtype is ignored during the comparison.。

处理内嵌类型的multipart(multipart/related)直接交给IE浏览器去显示就好了:

response.setContentType(”message/rfc822”);

message.writeTo(response.getOutputStream());

总结:

总的来说这本书讲的很基础,前半部分告诉我们什么是email、email是如何收发的及email的格式、着重说明了smtp协议和pop3协议,甚至告诉大家怎么使用协议的命令收发邮件,这些对于使用API做web开发的程序员来说用处不是很大,但第3章邮件的组织结构讲述的还是比较好的;后半部分主要对Javamail进行说明,但是我个人觉得不如IBM

的在线教程介绍的实用,主要是例子写的别扭,呵呵。不过里面有一些细节可以起到拓宽知识面的作用。

此书对开发webmail用处不是很大,比如对于pop3协议来说,如何标记邮件,如何建立文件夹,如何移动邮件,甚至通讯录什么的都一点也没有提到,讲邮件搜索的时候没有说邮件过滤能不能通过搜索实现或者还是有更好的办法。更深入一点的比如用工厂模式解耦合、使用线程池提高性能等更是只字未提。哎~看来还得再找找,实在不行就操作数据库,那样麻烦很多但是应该什么都能实现。最近看webmail看的很不爽,网上这样的东西也很少,感觉没有一个套路...郁闷~~

因篇幅问题不能全部显示,请点此查看更多更全内容