JavaMail发送中文邮件中主题乱码的解决方法

 由于邮件我写的程序的邮件主题是写在配置文件(. properties)中的,Java程序读取properties配置文件内容时,是根据操作的编码方式来读取的,这样就造成程序的可移植性差。

带有中文的配置文件,尽量不用*. properties文件,标题的乱码问题就可以通过添加

String subject = MimeUtility.encodeText(email_title,"gb2312", "B");

来解决:




如果你的标题并不是写在properties里,可用以下方式解决;

发送邮件方法中添加了如下代码:

Properties props = new Properties();
props.put("mail.smtp.host", email_host);//设置发送邮件的邮件服务器的属性mail
props.put("mail.smtp.auth", "true");//需要经过授权,也就是有户名和密码的校验,这样才能通过验证
//有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
Session session = Session.getDefaultInstance(props);//用刚刚设置好的props对象构建一个session
session.setDebug(true);
便可以从控制台看到邮件实际发送中的编码等信息

控制台输出类似如下信息:

Subject: =?gb2312?B?1LTX1FNvbmFytcSy+sa31srBv82zvMbI1bGo?=

MIME-Version: 1.0

Content-Type: multipart/mixed; 

boundary="----=_Part_0_1487500813.1433397688098"


------=_Part_0_1487500813.1433397688098

Content-Type: text/html;charset=gb2312

Content-Transfer-Encoding: quoted-printable

。。。。。。

最常用的 Content-Transfer-Encoding 有 Base64 和 Quoted-Printable 两种。在对二进制文件或者中文文本进行转化时,Base64 得到的“字节串”比 Quoted-Printable 更短。在对英文文本进行转化时,Quoted-Printable 得到的“字节串”比 Base64 更短


便可尝试代码中添加

sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();  
msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");

或者

String subject = MimeUtility.encodeText(email_title,"gb2312", "B");
来解决编码问题;


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值