jmail问题笔记

关于使用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); //替换用户名称

你可能感兴趣的:(html,qq,Gmail)