永发信息网

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

答案:2  悬赏:30  手机版
解决时间 2021-03-09 12:09
  • 提问者网友:自食苦果
  • 2021-03-09 01:35
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

已自行解决,使用过滤器
最佳答案
  • 五星知识达人网友:摆渡翁
  • 2021-03-09 02:26
msg.setSubject("=?utf-8?"XXXXXXXXXXXXXXXXXXX");

主题中,写明是什么编码了,你还用别的编码解。
全部回答
  • 1楼网友:躲不过心动
  • 2021-03-09 03:59
这个过程比较复杂,首先,你要使用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"), 你获取的编码);//这里转码 } 这样你就能获取所有中文主题了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯