永发信息网

javamail中邮件主题及内容乱码的问题

答案:2  悬赏:30  手机版
解决时间 2021-03-09 12:09
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");

此方法无法解决我的主题乱码
subject = new String(subject.getBytes("BIG5"),"8859_1");
message = new String(message.getBytes("BIG5"),"8859_1");
无法解决
msg.setSubject(MimeUtility.encodeText(subject));
msg.setText(MimeUtility.encodeText(message));
无法解决
msg.setSubject("=?GB2312?B?"+Base64.encode(subject.getBytes())+"?=");

无法解决
------------------------------------分割线---------------------------------
用STRUTS1.2+TOMCAT做的,初学者代码不是很好
sebdmail.java
response.setContentType("text/html;charset=GBK");
PrintWriter out = response.getWriter();
HttpSession session=request.getSession(true);
try{
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
Session sessionmail = Session.getInstance(props);
sessionmail.setDebug(true);

String subject=request.getParameter("subject");
String message=request.getParameter("message");
Message msg = new MimeMessage(sessionmail);

msg.setSubject(MimeUtility.encodeText(subject));//不转码也是乱码
msg.setText(MimeUtility.encodeText(message));
msg.setFrom(new InternetAddress((String)request.getSession().getAttribute("username")));

Transport transport = sessionmail.getTransport();

transport.connect((String)request.getSession().getAttribute("smtphost"),
Integer.parseInt(request.getSession().getAttribute("smtpport").toString()),
(String)request.getSession().getAttribute("username"),
(String)request.getSession().getAttribute("password"));

transport.sendMessage(msg,
new Address[]{new InternetAddress(request.getParameter("receiveaddress"))});
transport.close();
}
catch (Exception e)
{
out.print("发送失败!");
return null;
}
out.print("发送成功");
return null;
}
邮件可以正常发送

JSP,struts-config,web。xml格式都是UTF-8
测试浏览器是谷歌浏览器
测试邮箱为QQ邮箱
数据获取为FORMBEAN+SESSION

已自行解决,使用过滤器
最佳答案
msg.setSubject("=?utf-8?"XXXXXXXXXXXXXXXXXXX");

主题中,写明是什么编码了,你还用别的编码解。
全部回答
这个过程比较复杂,首先,你要使用msg.getcontenttype()来获取contenttype,找出里面的charset=来获取编码,如果这里面没有编码,则使用getheader方法来获取"from","to","subject"中的编码(至少会有一个有),这里面的编码以"=?"开头(形式一般为=?gbk?b?之类,其中的gbk就是编码),获取编码后,对应使用 string subject = msg.getheader("subject", ",", false);//优先使用getheader来获取内容,不要使用getsubject,那个经过一次编码处理,你以后会很麻烦 if (!stringutil.isnull(你获取的编码) && stringutil.isnull(parsecode.getcharset(subject))) {//邮件主题中不含编码,则使用从from或to中获取的编码 subject = new string(subject.getbytes("iso8859_1"), 你获取的编码);//这里转码 } 这样你就能获取所有中文主题了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
鹏毅广告地址有知道的么?有点事想过去
宝吉星升级导航怎么样?
属于只引起会计等式左边会计要素变动的经济业
在植物细胞中,ATP的合成场所不可能是A. 线粒
手机已经刷机了,如果我再恢复出厂设置会不会
想买个钻戒 什么牌子性价比高啊 求推荐
玉门顺兴现代农业示范园区怎么去啊,有知道地
我在g6高速一真跑160迈怎么没有超速
斜射入水,其他介质中,入射角和折射角是什么
方程x²+x+1=0所有实数解的集合,用描述
马爱农和蔡美玲 地海巫师 哪个好
哈晶旅社我想知道这个在什么地方
深圳比克厂工资怎么样啊!工作时间长不长啊?
克拉玛依市第十六小学地址在什么地方,想过去
您尾号*7081交行信用卡于2015年11月28日还款
推荐资讯
喷码机能喷印什么内容?
为什么是11:42?怎么算的?
力控组态软件有狗的情况下,安装软件还需要密
对任意x∈R恒成立的意思是不是X为任意实数
柱上开关怎么命名
潍坊市哪里能买到假烟 要抵挡的 最好是2.5元
闹钟响了.英语怎么写
孙鑫vc++视频rar压缩文件的解压密码是多少?
萍乡市富民银行贷款需要什么手续呢
渣鱼河村在什么地方啊,我要过去处理事情
图2为“我国沿30ºN几种地理参数随经度的
梦想公益基金会是做什么的?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?