邮件正文偶尔出现乱码!

wrong1111 2007-08-17 04:39:44
最近,做项目中,遇到一个很奇怪的问题!如下:
我用应用程序在服务器端写了一个定时发送邮件的程序!用QUARTZ写的.
邮件是从内网的另一台服务器上读取.HTML文件,然后以字符串形式当做邮件正文发送.经测试,都能正常发送,接收.唯一的是在邮件正文中偶尔,随机的出现几个汉字的乱码!!读取文件代码:
[CODE]
public String readFile(String path) {
StringBuffer htmlStr = new StringBuffer();

while (path.indexOf("//") != -1) {
path = path.replaceAll("//", "/");
}
byte[] buff = new byte[1024];
boolean cont = true;
FileInputStream infile = null;
// 生成对象infile 准备读取文件
// System.out.println(" 读取文件路径----> " + path);
try {
infile = new FileInputStream(path);
} catch (FileNotFoundException e) {
System.out.println("FileNotFoundException--->" + path);
}
int n = 0;
try {
while (cont) {

if ((n = infile.read(buff)) > 0) { // 从文件读取数据
String str = new String(buff, 0, n);
htmlStr.append(str);
} else {
cont = false;
}

}
} catch (Exception e) {
cont = false;
System.out.println("Reading File Exception--->" + e.getMessage());
} finally {
if (infile != null) {
try {
infile.close();
} catch (IOException e) {
e.printStackTrace();
}
infile = null;

}
}

return htmlStr.toString();
}
[/CODE]
发送邮件代码:

public boolean sendHtmlMail(String to,String message,String subject,Date date)
{
boolean flag = false;
try {
newMessage = new MimeMessage(sendMailSession);
newMessage.setFrom(new InternetAddress(mail_from,"收件人可看到 谁发的"));//设置发信人

newMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));//设置收信人
//newMessage.setRecipients(Message.RecipientType.CC, InternetAddress.parse(to));//设置抄送
//newMessage.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(to));//设置暗送
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();//用于处理主题乱码问题
newMessage.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?="););//设置邮件主题

newMessage.setSentDate(date);//设置邮件发送时间




//创建邮件内容部份
MimeMultipart multipart = new MimeMultipart();

BodyPart messageBodyPart = new MimeBodyPart();

//设置邮件的头编码
messageBodyPart.setContent(message, "text/html;charset=GBK");
messageBodyPart.setHeader("Content-Transfer-Encoding","base64");
messageBodyPart.setHeader("Content-Type","text/html;charset=GBK");

multipart.setSubType("related");
multipart.addBodyPart(messageBodyPart);
newMessage.setContent(multipart);
newMessage.saveChanges();
Transport transport = sendMailSession.getTransport("smtp");
transport.connect(mail_smtp_host, mail_username, mail_password);
transport.sendMessage(newMessage, newMessage.getAllRecipients());
transport.close();
flag = true;
System.out.println(Constants.formatDate(System.currentTimeMillis()) + subject + " 邮件发送"+ to+ " 成功……");
//Transport.send(newMessage);
} catch (AddressException e) {
logger.error("发送email到\""+to+"\"时出错:"+e.getMessage());
e.printStackTrace(System.err);
e.printStackTrace();
} catch (MessagingException e) {
logger.error("发送email到\""+to+"\"时出错:"+e.getMessage());
e.printStackTrace(System.err);
e.printStackTrace();
}catch(Exception ex){
logger.error("发送email到\""+to+"\"时出错:"+ex.getMessage());
ex.printStackTrace(System.err);
ex.printStackTrace();
}
return flag;
}

读取的文件是在LIUX的JBOSS服务器上.而通过网页访问此文件,没有问题,正常.
如果是字符集的问题,那么就不应该仅仅是几个字的问题了.而是所有的邮件正文.
哪位有不同意见请教!!!!郁闷几天了!!没找到原因.现在我只能拆开来测试了.
原来我采用的是URL直接来抓取网页..后来领导说通过内网直接读取文件.哎!!
EMIAL : wrong1111@126.com

...全文
311 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangxccom 2007-08-17
  • 打赏
  • 举报
回复
用下面的方式把哪段替了试试看
LineNumberReader lnr=new LineNumberReader(new InputStreamReader(infile));
while(true){
String str=lnr.readLine();
if(str!=null){
htmlStr.append(str);
}
else{
break;
}
}
yangxccom 2007-08-17
  • 打赏
  • 举报
回复
if ((n = infile.read(buff)) > 0) { // 从文件读取数据
String str = new String(buff, 0, n);
htmlStr.append(str);
} else {
cont = false;
}
这里可能有点问题,就是正好读的位置在把一个汉字的中间,把一个汉字分成了两半,你把这东东转成字符串,会出现乱码的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧