最近的项目需要发送邮件给注册用户,找回密码,把以前写的代码直接拿来使用,一切正常。等了几天,再次测试时,却出现了问题。
问题描述如下:
发件人的名称出现了乱码(邮件的正文内容是正常的)。于是就各种查找原因,各种试验,还是不行
以下是关键的代码截取:
某个方法的内部:截取{
MimeMessage mm = null;
MimeMessageHelper helper = null;
JavaMailSenderImpl smi = new JavaMailSenderImpl();
。。。
smi.setDefaultEncoding("UTF-8");
。。。。省略
mailSender = smi;
mm = mailSender.createMimeMessage();
helper = new MimeMessageHelper(mm, true, "UTF-8");
String from1="中文测试 [email protected]";
//设置发件人的名称
helper.setFrom(getFromInternetAddress(from1));
。。。。。。
}
public InternetAddress getFromInternetAddress(String from) {
String regex1 = ".*[<][^>]*[>].*"; //判斷是xxxx <xxx>格式文本
String regex2 = "<([^>]*)>"; //尖括號匹配/**
String personal = null;
String address = null;
if(from.matches(regex1)){
personal = from.replaceAll(regex2, "").trim();
Matcher m = Pattern.compile(regex2).matcher(from);
if(m.find()){
address = m.group(1).trim();
}
try {
return new InternetAddress(address, personal, "gb2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}else{
try {
return new InternetAddress(from);
} catch (AddressException e) {
e.printStackTrace();
}
}
return null;
}
上面这些代码一直都是运行正常的,今天却怪了。用了2个小时测试,问题一直没有解决。。。。后来再一看,发现保存这些的代码的java源文件的保存格式,不是GBK格式了,变成了utf-8,又查看了以前的自己的其他工程此处代码文件使用的GBK格式保存的。于是把源文件改回GBK格式保存,再次测试,问题解决。
后来回想,这这几年也遇到过一些源程序代码文件保存格式导致程序乱码的问题,所以此处记录下来备忘。