仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 565|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA编程:利用java mail 包收发中文邮件的编码,...

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:25:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
但是我同意你的观点,对于大型项目来说,应该是采用框架的一部分,根据功能的不同而改进,欢迎你能再提出些宝贵意见,我会多多学习的。说到jbuilder,我可能是个人感觉,用的时候确实没有vs爽,我最喜欢的IDE是netbeans,谢谢。编码|办理|成绩|中文编码


邮件头(拜见RFC822,RFC2047)只能包括US-ASCII字符。邮件头中任何包括非US-ASCII字符的部分必需举行编码,使其只包括US-ASCII字符。以是利用javamail发送中文邮件必需经由编码,不然他人收到你的邮件只能是乱码一堆。不外利用javamail包的办理办法很复杂,用它自带的MimeUtility工具中encode开首的办法(如encodeText)对中文信息举行编码就能够了。



例子:



MimeMessagemimeMsg=newMimeMessage(mailSession);



//让javamail决意用甚么体例来编码,编码内容的字符集是体系字符集mimeMsg.setSubject(MimeUtility.encodeText(Subject));



//利用指定的base64体例编码,并指定编码内容的字符集是gb2312

mimeMsg.setSubject(MimeUtility.encodeText(Subject,”gb2312”,”B”));



一般对邮件头的编码体例有2种,一种是base64体例编码,一种是QP(quoted-printable)体例编码,javamail依据详细情形来选择编码体例。



如“txt测试”编码后内容以下:

=?GBK?Q?Txt=B2=E2=CA=D4



内里有个=?GBK?Q?,GBK暗示的是内容的字符集,?Q?暗示的是以QP体例编码的,前面紧跟的才是编码后的中笔墨符。以是用MimeUtility工具编码后的信息里包括了编码体例的信息。



邮件的注释也要举行编码,但它不克不及用MimeUtility里的办法来编码。邮件注释的编码体例的信息是要放在Content-Transfer-Encoding这个邮件头参数中的,而MimeUtility内里的办法是将编码体例的信息放在编码后的注释内容中。以是假如你对注释也用MimeUtility举行处置,那末其他邮件程序就不会一般显现你编码的邮件,由于其他邮件软件如outlook,foxmail只会依据Content-Transfer-Encoding这个内里的信息来对邮件注释举行解码。



实在,邮件注释部分的编码javamail已主动帮你做了,当你发送邮件的时分,它会本人决意编码体例,并把编码体例的信息放进Content-Transfer-Encoding这个邮件头参数中,然后再发送。以是你所要做的就是间接把邮件注释的内容放进邮件中就能够了。



对邮件注释的编码体例对照多,包含了base64和QP体例,另有一些如7bit,8bit等等,由于javamail主动为邮件注释编码,以是我就纷歧一祥叙了。



例子:



//处置邮件注释

MimeBodyPartmbp=newMimeBodyPart();



if(ContentType()==null||ContentType.equals(""))

mbp.setText(Content);

else

mbp.setContent(Content,Content);











解码


javamail包中的MimeUtility工具中也供应了对邮件信息解码的办法,都是以decode开首的一些办法(如decodeText)



例子:

StringSubject=mimemsg.getSubject();

StringChSubject=MimeUtility.decodeText(Subject);



关于base64和QP编码后信息,decode*办法能将他们准确的解码,可是,假如指定的字符集不合错误,那末javamail就会呈现毛病,不克不及准确地将其解码。



若有的邮件体系将”txt测试”编码后以下:

=?x-unkown?Q?Txt=B2=E2=CA=D4



这里指定的字符集是x-unknown,长短明白的字符集,javamail就不克不及准确的处置了,可是”测试”这两其中笔墨仍是依照gbk字符集编码的,以是你能够手工的将编码体例信息更正确,再用decode*办法来解码。



例子:

if(str.indexOf("=?x-unknown?")>=0){

str=str.replaceAll("x-unknown","gbk");//将编码体例的信息由x-unkown改成gbk

try{

str=MimeUtility.decodeText(str);//再从头解码

}catch(Exceptione1){

returnstr;

}





decode*办法都是依据在编码信息中包括的编码体例的信息来解码,以是decode*办法对邮件注释解码是有效的,由于邮件注释中不包括编码体例的信息。



同编码一样,邮件注释的解码也是由javamail做了。Javamail依据Content-Transfer-Encoding里的信息,来对邮件的注释解码。

客户程序从javamail获得的注释内容字符集为iso-8859-1,以是还要将字符集转换一下,例:



StringCorrectContent=newString(Content.getbytes(“iso-8859-1”),”gb2312”);



CorrentContent为准确的邮件注释了






java主要分三块,j2se:java的基础核心语言。j2me:java的微型模块,专门针对内存小,没有持续电源等小型设备。j2ee:java的企业模块,专门针对企业数据库服务器的连接维护。
不帅 该用户已被删除
沙发
发表于 2015-1-21 06:08:02 来自手机 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
因胸联盟 该用户已被删除
板凳
 楼主| 发表于 2015-1-21 06:08:03 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
飘灵儿 该用户已被删除
地板
发表于 2015-1-30 09:17:13 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
5#
发表于 2015-2-6 09:28:53 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
透明 该用户已被删除
6#
发表于 2015-2-10 03:00:48 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
愤怒的大鸟 该用户已被删除
7#
发表于 2015-2-13 05:36:21 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
蒙在股里 该用户已被删除
8#
发表于 2015-3-4 11:29:31 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-7 01:26:06 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
海妖 该用户已被删除
10#
发表于 2015-3-14 00:05:40 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
灵魂腐蚀 该用户已被删除
11#
发表于 2015-3-20 22:36:47 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-22 07:05

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表