sealjifeng
2010-05-31 12:34
浏览 258
已采纳

javamail在tomcat下发送邮件正文乱码,困了一天了

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下不行,其他都行。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • iteye_11438 2010-05-31 13:10
    已采纳

    tomcat中设置一下字符集,在conf目录下的server.xml里面找到8080端口的标签,加入URIEncoding="utf-8"试试,当然,bp.setContent(mailInfo.getContent(),"text/html;charset=utf-8");这里也改下

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题