我用应用程序在服务器端写了一个定时发送邮件的程序!用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]
发送邮件代码:
[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;
}
[/code]
读取的文件是在LIUX的JBOSS服务器上.而通过网页访问此文件,没有问题,正常.
如果是字符集的问题,那么就不应该仅仅是几个字的问题了.而是所有的邮件正文.
哪位有不同意见请教!!!!郁闷几天了!!没找到原因.现在我只能拆开来测试了.
原来我采用的是URL直接来抓取网页..后来领导说通过内网直接读取文件.哎!!
EMIAL : wrong1111@126.com