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

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");这里也改下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型