JavaMail使用总结

2024-04-28

JavaMail使用总结(共3篇)

JavaMail使用总结 篇1

SUN公司发布的用来处理EMAIL的API,提供给开发者处理电子邮件相关的编程接口。它虽是SUN的API,但它还没被加在标准的JAVA开发工具包中,这就意味着你使用前必须另外下载JAVAMAIL文件。除此之外你还需要SUN的JAVABEANS Activation Framework(JAF)。Javabeans activation framework运行很复杂,简单的说就是JAVAMAIL的运行必须得依赖于它的支持。

下载安装

JAVAMAIL是可选包,项目中需要用到就去官网下载,同时也需要下载JAF。安装JAVAMAIL只需要把它们直接把它们COPY到lib里(web项目不需要build path,java项目build path一下)就算安装成功。

所需的两个jar包: JAVAMAIL

mail.jar

ACTIVATION

activation-1.1.jar

底层

Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息。另外很好的实现了JavaMail API的框架有James、Spring Mail。Tips SMTP:用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。它帮助每台计算机在发送或中转信件时找到下一个目的地。用来发送或中转发出的电子邮件。

关于

java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream解决办法

在编写邮件发送相关程序时,会报错!

主要原因是

javax.mail和javax.activation这两个包已经在javaEE5当中属于基础包了,就是JDK中自带了已经,但是里面的方法与现在外面的mail.jar和activation.jar有一些出入,所以初学者在直接copy别人代码的时候往往会出现上面的错误。

废话不多说下面是解决方法

进到

JavaMail使用总结 篇2

Java语言作为一种强大的网络编程语言,为支持邮件系统的开发推出了JavaMail开发包,极大地简化了基于Java技术的邮件系统的开发。然而,JavaMail本身只提供了对MIME、POP3、IMAP4以及SMTP等相应标准邮件协议核心处理流程的支持。要开发具有良好结构和可扩展性能的实用邮件系统,常会遇到一些JavaMail本身并不支持的技术难点与关键点,如:嵌套结构的电子邮件内容的解释与处理方法、邮件内容与附件的处理方法、中文乱码问题的处理等,本文针对上述问题进行了探讨。

1 嵌套MIME邮件内容格式的递归解释算法

在邮件系统的开发中,正确理解邮件内容的组织格式是系统开发的关键。MIME协议的RFC2045、RFC2046等标准规范了邮件的格式与内容组织,JavaMail通过相应的类及类间的关系来描述标准规范的邮件格式,邮件结构及JavaMail中与MIME相关的类及类间的关系如图1所示。邮件体部分是以树型结构进行组织的,如果根节点为Multipart类型,表明邮件由多个体部分BodyPart组成,而每个BodyPart可以为MIME协议中定义的基础类型,也可以为Multipart类型,此时,该体部分同样可以嵌套多个子部分。在邮件的树型体结构中,叶子节点即为我们需要直接获取的邮件内容或附件等信息。

对邮件内容进行解释时,需要遍历树型邮件结构中所有叶子节点以获取邮件的内容与附件,通常我们以深度优先算法实现遍历。下面给出了可用于所有邮件系统开发的、有效解释邮件内容的通用递归方法:

2使用JAF激活机制构建MIME类型数据处理框架

MIME规范中定义了种类繁多的信息类型,我们可以通过邮件传送各种类型的信息。但同时,在邮件系统的开发中,如何为MIME类型的邮件内容或附件内容提供一个良好的程序处理框架成为开发过程中一个重点与难点内容。许多邮件系统中,因为没有很好地解决这个问题,使得系统结构非常混乱并且扩展性较差。

解决此问题的关键是如何在MIME类型与相应的操作组件间建立一种自动的激活框架。例如在Windows平台下的一些应用通常采用文件的扩展名为依据来激活相应的应用程序以支持对不同类型文件的操作。但如果在Java程序中采用类似的方法,将使应用丧失Java可移植等优良特性,并且实现时需通过本地native方法进行处理,较为麻烦。

事实上,JavaMail底层对MIME类型数据进行接收处理时依赖了JAF。JAF提供了一个框架用于实现动态发现由MIME头部定义的数据类型的处理部件。这种机制不仅很好地支持了JavaMail的底层实现,也可将其用于SOAP消息的附件传递以及在邮件系统开发中实现MIME类型数据的各种操作。

在深入研究JAF框架后,得出JAF主要组成部件在激活过程中的交互图如图2所示。

由图2可知,JAF框架中的主要部件为包括Malcap file、CommandMap、DataHandler、CommandObject等。通过各主要部件间的交互完成动态的JavaBeans的激活过程。基于JAF框架的应用开发的主要实现要点如下:

(1) 通过实现CommandObject使能JavaBean的JAF激活状态

所有要通过JAF框架激活的组件必须实现CommandObject接口。通过CommandObject接口中定义的方法setCommandContext(String verb,DataHander dh)将MIME数据处理对象DataHander传入相应的组件,作为该组件对相应MIME类型进行操作的基础。

(2) 使用Malcap文件映射MIME类型和相应操作Beans

对MIME类型数据的操作通常包括显示、编辑和打印。在JAF框架中使用Malcap文件进行MIME类型与相应的作用于特定MIME数据的操作Bean之间的配置。Malcap文件的格式如:

JAF框架中使用这种基于文件配置的方式映射MIME类型与相应操作Beans的做法使应用的开发具有良好的扩展性。

(3) 使用 CommandMap类的静态方法加载映射

JAF框架中使用类CommandMap描述MIME类型和对应的操作命令的映射。CommandMap类使用setDefaultCommandMap静态方法实现Malcap文件配置的加载(或注册),代码形式如下:

(4) 动态激活相应的组件

按照JAF框架要求实现Beans,并实现MIME类型、操作以及Beans之间的映射后,就可以依赖JAF的激活机制实现MIME类型的相应操作bean的动态激活了。显示附件内容的动态激活代码形式如下:

3 中文乱码问题分析与解决方案

在开发中文邮件系统过程中,中文乱码问题经常困扰许多开发者,因为乱码可能出现在邮件标题、邮件附件以及邮件正文等诸多地方,也无法用某一种方法解决所有的乱码问题。因此,彻底解决中文乱码问题成为中文邮件系统开发的难点之一。

经过作者的分析与跟踪,发现导致乱码的原因主要有两个方面:

(1) 由MIME编码引起的乱码 SMTP邮件传输协议只支持传输7bit 的字节流(每个字节的最高位将被强制转换为0),这就决定了SMTP 协议只能传输简单的ASCII 字符集的纯文本英文邮件。因此,在发送非ASCII码的邮件内容时,为了保证信息不丢失,邮件均按照MIME规范使用BASE64或OP进行编码。因此,如在获取邮件相关内容时不进行相应的解码,就会引起乱码。

(2) 由邮件内容字符的编码引起的乱码 中文邮件本身可能采用各种不同的编码方式,通常的中文编码方式如:“GB2312”、“ISO8859-1”等。而在Java中,默认的编码方式为Unicode编码方式。如果在获取邮件相关内容时不指定相应的编码方式,同样会引起乱码。

在了解了产生乱码的原因后,要处理好中文乱码问题,还需要了解JavaMail本身对编码的支持。JavaMail在编码问题上,遵循MIME的规范。对于邮件体内容部分,直接支持BASE64等编码方式,即JavaMail API中相关获取邮件内容的方法将自动对内容进行BASE64解码;而对于邮件的标题信息(如邮件主题和附件名等),JavaMail不支持其编码与解码,因为这样将违反MIME规范。

经过分析与试验,作者找到了解决邮件标题信息乱码和邮件内容乱码的通用方法。相关的通用代码段形式如下:

4 结束语

本文给出的通用邮件内容递归解释方法、JAF部件间交互图和基于JAF框架的邮件内容与附件处理框架的实现要点、中文邮件乱码通用解决方案,对开发基于Java技术的邮件系统具有普遍指导意义和重要参考价值。

摘要:JavaMail提供了对邮件收发核心流程很好的支持,但在开发实用邮件系统过程中,必然会遇到JavaMail本身并不支持的如嵌套邮件内容解释、MIME类型数据处理框架结构、中文乱码等技术难题。在全面研究基于Java技术的邮件系统开发的基础上,给出了通用的解决方案和实现要点。

关键词:JavaMail,JAF,中文乱码,邮件系统

参考文献

[1]Sun Microsystem Inc.JavaMail API Design Specification version1.2.2000,9.

[2]Sun Microsystem Inc.JavaBeans Activation Framework Specificationversion1.0.1999,5.

[3]RFC822,RFC2045,RFC2046 etc.http://www.iedf.org/rfc.

JavaMail使用总结 篇3

通过不同用量“施地佳”牌盐碱改良剂在油葵上的使用,验证其降盐碱的效果及油葵产量增减的幅度,为该改良剂进一步试验示范及盐碱地农作物大面积推广应用提供依据。

二、试验材料与方法

1.试验执行时间和地点

2008年4月~10月、新疆塔城地区塔城市也门勒乡阔克杰依达克村村民马仲凯油葵田。

2.供试作物

油葵,品种矮大头。

3.供试产品

“施地佳”牌盐碱改良剂〔有机质300g/l、AA100 g/l〕,由成都华宏生态农业科技有限公司生产。

4.试验设计

试验共设4个处理:处理1:亩用“施地佳”1000mL;处理2:亩用“施地佳”1200mL;处理3:亩用“施地佳”1500mL;处理4:对照(常规种植)。采用随机区组排列,重复3次,小区长20m、宽 4 m、小区面积80m2。共12个小区,全试验田净面积960㎡,四周设保护行。

5.试验方法

在种植油葵前取土化验,确定土壤含盐碱量,根据含量定改良剂用量。然后按田间设计拉线打埂,播种前将产品按规定计量加入喷雾器中用水稀释,均匀喷于各小区,立即浇水,以免蒸发。为防止串水,浇水时每个小区单独灌溉,待适墒后犁地整地播种。第二次喷施在浇头水前取土化验,再按规定计量随水滴入各小区。第三次化验在收获后进行。

6.试验地气候条件

塔城市是温带大陆性干旱气候,是北疆光热资源最为丰富和无霜期较长的区域之一。春秋日照时数13h,冬季日照时数达9.5h,夏季日照时数大15h。热量丰富,无霜期长。全年≥10℃有效积温约为2800~3000℃,无霜期123~150d。年平均气温5.9 ℃,极端最高气温40.3℃,极端最低气温-35.2℃。年平均降水量389.3mm。本年度降雨极少。是塔城市50年不遇的大旱之年,5月旬平均气温16.7℃,6月旬平均气温26.8℃,7月旬平均气温25.1℃,8月旬平均气温22.9℃,9月旬平均气温16.5℃。

三、试验地基本情况

1.试验地土壤条件

试验地地势平坦,前茬为打瓜,土质为潮土,土壤pH值8.4、含盐量8.87g/kg、有机质含量56.6g/kg、碱解氮54.11mg/kg、有效磷 8.0mg/kg、速效钾203mg/kg。

2.田间管理

试验地各小区施肥、播种、灌水、中耕除草等常规措施同大田一致,均在一天内完成。

四、试验结果及分析

1.各处理出苗情况调查

播种10d后,对各处理出苗情况进行调查。见表1

由表一可见,各处理比对照出苗数都有不同程度增加,且随着盐碱改良剂用量的加大,出苗数增大。

2.各处理间生育性状观察记载:见表2

从上表分析:各处理株高长势、每花盘重、千粒重各生育及经济性状均优于对照,最终表现在产量优于对照。且随着盐碱改良剂用量的加大,各处理生育及经济性状的优势越明显。

3.施用改良剂后各处理土壤平均含盐量变化情况:见表3

6.各处理间含盐量变化及方差分析:见表5、表6

表六方差分析表明:F=1<5.14说明不同处理之间含盐量差异不显著,F=43.3>10.92说明不同处理与对照之间含盐量差异达极显著水平。

五、结论

上一篇:社会认知调查报告下一篇:国外课堂教学模式1