JavaMail乱码问题

最近一个项目中碰到JAVAMAIL的应用,因为开发环境是在WIN OS中,所以在开发过程中的测试一直都很正常,但当系统提交给测试,放到linux os中时,邮件发送却出现了乱码。下面是在开发过程中(WIN OS)能够正常发送邮件的代码

message.setFrom(new InternetAddress(MimeUtility.encodeText(emailEntity.getFromName()) + " xxx@xx.xx"));

该代码在WIN OS中正常,到LINUX OS中出现了乱码,后修改代码如下:

BASE64Encoder base64Encoder = new BASE64Encoder();
  message.setFrom(new InternetAddress("=?gbk?B?" + base64Encoder.encode(emailEntity.getFromName().getBytes("GBK")) + "?= xxx@xx.xx"));

修改后的代码在WIN OS和LINUX OS中测试都能正常显示中文

 

 

 

改动说明:

对“收件人、发件人、主题”进行BASE64编码

下面是一封正常显示中文的邮件的头部(包括发件人、收件人、主题的源代码截图)

 

 

 

可以看出一封邮件正常情况下显示的发件人信息如下

From: =?gbk?B?w/Gwsr01z9U=?= xxx@xx.xx

说明:以 ?= 开始后接编码方式(GBK),再以?号隔开,中间B表示经过BASE64编码,再后面的?后的wc7WvrPJ就是表示对某段中文经过BASE64编码后的字符串,最后再以?=结束),既然无法使用JAVAMAIL提供的工具类来编码汉字(查看JAVAMAIL的源码可以发现其实MimeUtility.encodeText()方法也是在对中文进行BASE64编码),那只好采取手动拼凑的方法对汉字进行BASE64编码,代码如下:

BASE64Encoder base64Encoder = new BASE64Encoder();

message.setFrom(new InternetAddress("=?gbk?B?" + base64Encoder.encode(emailEntity.getFromName().getBytes("GBK")) + "?= xxx@xx.xx"));

 

base64Encoder.encode(emailEntity.getFromName().getBytes("GBK")) 这里采用

emailEntity.getFromName().getBytes("GBK");在未指定GBK时仍出现乱码,这里的原因可能是因为数据库使用的是GBK的编码,因为emailEntity中fromeName字段是从数据库中读取出来的,就这样乱码问题终于解决...

 

 

提供一条查看数据库编码方式的SQL(至少ORACLE适用)

select userenv('language') from dual;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值