六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 112|回复: 0

jmail问题笔记

[复制链接]

升级  40%

4

主题

4

主题

4

主题

童生

Rank: 1

积分
20
 楼主| 发表于 2013-2-7 19:34:33 | 显示全部楼层 |阅读模式
关于使用javamail包发送邮件时编码问题的解决:
1. 在发送正文时指定正文编码:
    在发送邮件时使用
    MimeBodyPart  body = new MimeBodyPart();
    body.setContent(content, "text/html;charset=GB2312");
    注意此时的content编码必须是所指定的编码格式。
2.  在设置邮件标题时也要指定标题的编码:
    MimeMultipart mmp=new MimeMultipart();
    mmp.setSubject(subject, "GB2312");
    同上也要求subject的编码和指定的编码一致。

3. 发送正文时也可以在header中指定传输编码:
    body.setHeader("Content-Transfer-Encoding", "base64"); // 指定使用base64编码

4. 发送名称含中文的附件到邮件服务器,用别的邮件接收程序接收到的附件名显示为乱码

解决办法:
在调用MimeBodyPart的setFileName()时使用Base64编码。例如:

BASE64Encoder enc = new BASE64Encoder();//该类位于jre/lib/rt.jar中
//fds为FileDataSource实例
mbp.setFileName("=?GBK?B?"+enc.encode((fds.getName()).getBytes())+"?=");  

5. Gmail、163、qq邮箱都不可以随意更改发送人邮件地址,即setFrom的时候完整邮箱地址必须与前面设置的用户名和smtp服务器对应。而263.sina则可以随意设置发送人邮件地址。

6.生成附件,replaceAll时要改编码。
     byte[] tmp1 = this.getName().getBytes("gb2312");
        String tmpAcctName1 = new String(tmp1);
        templateContent = templateContent.replaceAll("##Name##",
            tmpAcctName1); //替换用户名称
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表