`
wezly
  • 浏览: 485324 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Javamail中的常见中文乱码问题与解决办法

 
阅读更多

在使用javamail api开发邮件服务系统时,我们常常会碰到很多中文乱码问题,下面就分别介绍如何解决这些问题。

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

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

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

 

2.接收邮件时,获取某些邮件发送程序发送的email地址,发送地址显示为乱码

解决办法:
对含有中文的发送地址,使用MimeUtility.decodeTex方法,对其他则把地址从ISO8859_1编码转换成gbk编码,见下例

public static String getFrom(Message msg){ 
    String from=""; 
    try{ 
      if(msg.getFrom()[0]!=null) 
        from=msg.getFrom()[0].toString(); 
      if(from.startsWith("=?GB")||from.startWith(“=?gb”)){ 
        from=MimeUtility.decodeText(from); 
      }else{ 
        from=StringUtil.toChinese(from); 
      } 
    }catch(Exception e){ 
      e.printStackTrace(); 
    } 
    from=StringUtil.replaceStr(from,“<”,“<”);// replaceStr为字符串替换函数 
    from=StringUtil.replaceStr(from,">",">"); 
    return from; 
  } 

///////////////////StringUtil的toChinese方法////////////////////////// 
public static String toChinese(String strvalue){ 
    try{ 
      if(strvalue==null) 
        return null; 
      else{ 
        strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK"); 
        return strvalue; 
      } 
    }catch(Exception e){ 
      return null; 
    } 
  } 

 

3.接收邮件时,获取某个邮件的中文附件名,出现乱码

解决办法:
对于用base64编码过的中文,则采用base64解码,否则对附件名进行ISO8859_1到gbk的编码转换,例如:

String temp=part.getFileName();//part为Part实例 
if((temp.startsWith("=?GBK?B?")&&temp.endsWith("?=")) 
   ||(temp.startsWith("=?gbk?b?")&&temp.endsWith("?="))){ 
    temp=StringUtil.getFromBASE64(temp.substring(8,temp.indexOf("?=")-1)); 
}else{ 
    temp=StringUtil.toChinese(temp);//该方法如前所叙 
} 

/////////////StringUtil的getFromBASE64方法/////////  

public static String getFromBASE64(String s) { 
    if (s == null) return null; 
    BASE64Decoder decoder = new BASE64Decoder(); 
    try { 
      byte[] b = decoder.decodeBuffer(s); 
      return new String(b); 
    } catch (Exception e) { 
      return null; 
    } 
  } 

 


乱码问题的调试步骤总结:

基本上在javamail中碰到的中文乱码问题就这么多了,如果你的程序出现了中文乱码,首先不要惊慌,可用多个其他的邮件发送或接收程序进行验证,看是在哪个环节出现了问题,然后再仔细对照原文和乱码,调用相应的编码解码方法就行了。

分享到:
评论

相关推荐

    javamail 上传附件中文乱码修改(附修改之后的mail.jar和反编译工具)

    NULL 博文链接:https://instance.iteye.com/blog/577172

    javamail问题及解决方案

    本文将基于一个具体的JavaMail示例代码,探讨在使用JavaMail过程中常见的问题及其解决方案。 #### 一、连接问题 在JavaMail示例代码中,首先设置了邮件服务器的信息,例如: ```java String host = "smtp.163....

    javamail发送邮件 主题乱码解决

    第90行,setSubject("")

    javamail 中文API文档

    ### JavaMail API中文文档知识点详解 #### 一、概述 JavaMail API是Java平台上的电子邮件解决方案,它提供了一组用于发送、接收、管理和处理电子邮件消息的API。JavaMail API主要包含以下几个核心概念:会话...

    文件下载response.setHeader()下载中文文件名乱码问题解决办法.pdf

    在IT领域,尤其是Web开发中,文件下载是一个常见的功能,而处理中文文件名乱码问题则是一个常见的挑战。本篇主要探讨如何解决使用`response.setHeader()`方法下载中文文件名时出现的乱码问题,以及与之相关的HTTP...

    使用javamail包收发中文邮件的编码,解码问题以及解决方法.pdf

    使用 JavaMail 包收发中文邮件的编码、解码问题以及解决方法 使用 JavaMail 包收发中文邮件时,需要考虑编码和解码的问题。在发送中文邮件时,邮件头需要进行编码,使其只包含 US-ASCII 字符。 JavaMail 包提供了 ...

    使用javamail包收发中文邮件的编码,解码问题以及解决方法扫描.pdf

    使用 JavaMail 包收发中文邮件的编码、解码问题以及解决方法 JavaMail 是一个流行的 Java API,用于发送和接收电子邮件。然而,在使用 JavaMail 发送中文邮件时,可能会遇到编码和解码问题。本文将详细介绍使用 ...

    javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码

    在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...

    Javamail使用过程中常见问题解决方案

    "Javamail使用过程中常见问题解决方案" 在本文中,我们将详细介绍Javamail使用过程中常见问题解决方案,通过示例代码来详细介绍解决方案,对大家的学习或者工作具有一定的参考学习价值。 问题1:无法连接SMTP...

    JavaMail常见问题.doc

    JavaMail API 是一个Java编程语言中的库,用于处理电子邮件的创建、发送和接收。这个API提供了与多种邮件协议(如SMTP、POP3、IMAP)交互的能力,同时也支持MIME标准,允许处理复杂的邮件格式,包括附件和多部分消息...

    javamail详例与帮助文档

     虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeans Activation Framework ...

    JavaMail 内存溢出问题

    JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送、接收和管理。在实际使用过程中,可能会遇到内存溢出(Memory Overflow)的问题,这通常是由于邮件处理...同时,借助性能分析工具,可以更好地诊断和解决问题。

    关于用javamail发送邮件时,由于邮件服务器要SSL,解决办法

    在IT行业中,发送电子邮件是一项常见的任务,而JavaMail是一个广泛使用的API,用于处理与电子邮件相关的各种操作。在尝试使用JavaMail发送邮件时,如果邮件服务器要求使用SSL(Secure Socket Layer)或TLS...

    javamail(带界面的javamail)

    JavaMail 是一个强大的开源库,用于在Java应用程序中实现电子邮件的发送和接收功能。它提供了丰富的API,使得开发者能够方便地处理SMTP、POP3、IMAP等邮件协议,支持多种邮件格式,包括文本、HTML以及带有附件的邮件...

    JavaMail+JAF+JavaMail_API+JavaMail_API详解

    总的来说,这个压缩包提供了一整套的JavaMail开发资源,包括最新的JavaMail库、JAF组件、详细的API文档(英文和中文),以及一个可能的中文详解。对于想要在Java环境中开发邮件功能的开发者来说,这是一个非常全面的...

    最新版本的JavaMail和 JavaBeans Activation Framework 1.1.0 解决jsp发送邮件问题

    本文将深入探讨JavaMail和JAF的核心功能,以及如何利用它们解决JSP中的邮件发送问题。 **JavaMail** JavaMail API是Java平台上的一个开源库,它允许开发者编写能够与邮件服务器交互的应用程序。这个API提供了丰富...

    javamail 邮件系统

    JavaMail邮件系统是一种基于Java平台的邮件发送和接收解决方案,它允许开发者通过编程方式与SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)等邮件服务器进行交互。在JavaMail中,...

    javamail的jar包:javamail-1.6

    JavaMail 是一个开源库,用于在Java应用程序中处理电子邮件。这个库提供了丰富的API,使得开发者可以方便地执行发送、接收、读取和管理邮件的任务。`javamail-1.6`是JavaMail的一个版本,它包含了从早期版本中继承的...

    JavaMail-1.5 API

    在评估目的下,开发者可以使用JavaMail API进行内部评估,如开发基于规范的应用程序,并且在不实现规范的任何部分的情况下,与第三方讨论规范,或者在讨论规范的通讯中摘录规范的简短片段,前提是这些摘录不构成规范...

    JavaMail 1.6.0 的官方例子

    通过对这些官方示例的深入学习和实践,开发者不仅可以掌握 JavaMail 的基本用法,还能了解如何解决实际开发中遇到的各种邮件处理问题。在使用 JavaMail 1.6.0 的过程中,理解并应用这些知识点将大大提高开发效率和...

Global site tag (gtag.js) - Google Analytics