javamail直接在eclipse下跑和在jetty下跑完全正常,但是放到tomcat下测试时,发现正文部分是乱码,标题的乱码已解决。昨天试了各种编码方式,依然未解决问题。代码如下:
public static boolean sendHtmlMail(MailSenderInfo mailInfo){
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
// 如果需要身份认证,则创建一个密码验证器
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session
.getDefaultInstance(pro, authenticator);
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mp = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart bp = new MimeBodyPart();
// 设置HTML内容
//html.setContent(mailInfo.getContent(),"text/html;charset=gb2312");
bp.setContent(mailInfo.getContent(),"text/html;charset=gb2312");
mp.addBodyPart(bp);
// 将MiniMultipart对象设置为邮件内容
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
mailMessage.setSubject("=?utf8?B?"+enc.encode(mailInfo.getSubject().getBytes())+"?=");
mailMessage.setContent(mp);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
应该是这里要怎么设置,不过基本昨天试过十几种方法都不行,要崩溃了。不明白为什么在tomcat下不行,其他都行。