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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作