`
ShellyLi
  • 浏览: 114244 次
  • 性别: Icon_minigender_2
  • 来自: 山东
社区版块
存档分类
最新评论

使用javamail api开发邮件服务系统时,常碰的中文乱码问题

 
阅读更多
乱码是因为不同语系操作系统之间文字编码不通用造成的,可以用南极星等软件显示乱码.基本上在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结合JSP实现中文邮件收发系统.rar

    在处理中文字符时,JavaMail API支持MIME(多用途互联网邮件扩展)编码,确保非ASCII字符(如中文)在传输过程中不会出现乱码问题。 JSP是Java的一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,实现...

    JavaMail开发原理简介PPT

    邮件开发过程中会遇到一些常见问题,比如中文附件的乱码问题、Tomcat中JavaMail的支持与冲突,以及如何实现有效的邮件群发。这些问题需要开发者深入理解邮件协议和JavaMail的使用方式来解决。 邮件服务的核心是邮件...

    jsp/servlet javamail 发送邮件 可发送多个附件

    这个系统可能基于JavaMail API来实现邮件的发送,而JavaMail是一个强大的开源库,可以处理复杂的邮件服务需求。 1. **JavaMail API**: JavaMail API是Java平台上的标准邮件服务接口,提供了创建、发送和接收邮件的...

    Javamail开发

    在实际开发中,还会遇到一些常见问题,如中文附件的乱码问题、Tomcat中JavaMail的兼容性和冲突问题,以及如何高效地实现邮件群发。 邮件开发涉及的基本概念包括邮件服务器和电子邮箱。邮件服务器扮演着类似现实生活...

    Java邮件开发源代码.zip

    使用JavaMail API进行邮件开发时,需要注意以下几点: 1. 错误处理:邮件发送可能会因为网络问题、认证失败等原因失败,需要处理这些异常。 2. 安全性:确保正确处理敏感信息,如用户名和密码,避免明文存储。 3. ...

    传智播客张孝祥Java邮件开发学习笔记

    在本学习笔记中,博主孙风涛详细记录了张孝祥讲师主讲的《Java邮件开发》课程,涵盖了电子邮件基础知识、邮件协议、JavaMail API的使用、邮件内容的组织、编码及发送过程,以及在Web应用中集成邮件功能的实践。...

    JavaMail组件开发

    JavaMail组件是Java编程语言中用于处理电子...总之,JavaMail组件是Java开发中处理电子邮件不可或缺的工具,通过理解和掌握JavaMail的使用,开发者可以轻松地构建与邮件服务相关的功能,提升应用的实用性和用户体验。

    javaMail.zip

    在JavaMail API的帮助下,开发人员可以轻松地创建、发送、接收和管理电子邮件。 JavaMail API 提供了丰富的接口和类,用于构建邮件系统。主要的接口包括 `Session`,`Message`,`Multipart` 和 `Address`。`Session...

    Java自带的Java-mail框架 163 邮件发送,支持多附件,没中文乱码

    在本案例中,我们将关注如何使用JavaMail发送带有多个附件且不出现中文乱码的邮件,特别是通过163邮箱服务提供商。 1. **JavaMail API基础**: JavaMail API提供了一系列的类和接口,如`Session`,`Message`,`...

    spring整合freemarker发送邮件例子

    在本示例中,我们将探讨如何使用Spring框架与FreeMarker模板引擎相结合,来实现一个功能丰富的电子邮件服务。这个服务能够发送HTML格式的邮件,其中包含内嵌的图片,并且能够处理附件,同时解决字符编码可能导致的...

    javamail收发邮件(带附件,正文带图).docx

    JavaMail API 是 Java 平台上广泛使用的邮件处理库之一,它允许开发人员通过简单的 API 调用来发送和接收电子邮件,包括支持附件和内嵌图片等功能。 #### 二、邮件的基本结构 邮件由邮件头和邮件体两部分组成: -...

    邮件的收发.pptx

    - **中文名的邮件附近乱码问题**:确保使用正确的字符集编码(如UTF-8)来避免乱码问题。 - **Tomcat中JavaMail支持与冲突问题**:配置合适的库版本,解决兼容性问题。 - **SMTP邮件服务器程序的开发**:涉及邮件...

    Java邮件发送实例

    Java邮件发送是一个常见的任务,尤其在开发Web应用或者自动化任务时。这个实例向我们展示了如何使用JavaMail API发送一封简单的HTML格式的邮件。下面将详细解释这个实例中的关键知识点。 首先,我们需要导入必要的...

    java mail 收发邮件Demo源码

    这个"java mail 收发邮件Demo源码"提供了一个实际应用示例,可以帮助我们理解如何使用Java Mail API实现邮件的收发以及处理附件和编码问题。 1. **Java Mail API简介** Java Mail API 是由Java Community Process ...

    java发邮件用到的jar包

    在Java编程中,发送电子...总的来说,Java发邮件涉及的主要知识点包括JavaMail API的使用、SMTP协议的理解、邮件格式的处理以及安全性和性能优化。通过理解这些概念和实践,开发者可以实现高效且可靠的邮件发送功能。

    java简易小邮箱 带下载附件

    通过实践这个项目,开发者不仅可以掌握JavaMail API的使用,还能提升对邮件系统工作原理的理解,为将来开发更复杂的企业级邮件应用打下坚实基础。在实际项目中,还可以扩展功能,如支持HTML格式的邮件、添加日历事件...

    Java Web报价管理系统 带邮箱验证功能 项目开发案例

    3. **JavaMail API**:用于实现邮件发送功能,用户注册时,系统会发送一封带有验证链接的邮件到用户提供的邮箱。 4. **HTML/CSS/JavaScript**:构建前端用户界面,提供良好的用户体验。 5. **框架**:可能使用了...

    JAVAEE servlet实验

    - **电子邮件定时发送**:使用JavaMail API开发一个邮件系统,能定时发送文本信息,如商家促销邮件。利用`servlet`或`ServletContextListener`来触发定时任务,使用`java.util.Timer`类来管理定时发送。为了获取用户...

Global site tag (gtag.js) - Google Analytics