在使用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中碰到的中文乱码问题就这么多了,如果你的程序出现了中文乱码,首先不要惊慌,可用多个其他的邮件发送或接收程序进行验证,看是在哪个环节出现了问题,然后再仔细对照原文和乱码,调用相应的编码解码方法就行了。
分享到:
相关推荐
NULL 博文链接:https://instance.iteye.com/blog/577172
本文将基于一个具体的JavaMail示例代码,探讨在使用JavaMail过程中常见的问题及其解决方案。 #### 一、连接问题 在JavaMail示例代码中,首先设置了邮件服务器的信息,例如: ```java String host = "smtp.163....
第90行,setSubject("")
### JavaMail API中文文档知识点详解 #### 一、概述 JavaMail API是Java平台上的电子邮件解决方案,它提供了一组用于发送、接收、管理和处理电子邮件消息的API。JavaMail API主要包含以下几个核心概念:会话...
在IT领域,尤其是Web开发中,文件下载是一个常见的功能,而处理中文文件名乱码问题则是一个常见的挑战。本篇主要探讨如何解决使用`response.setHeader()`方法下载中文文件名时出现的乱码问题,以及与之相关的HTTP...
使用 JavaMail 包收发中文邮件的编码、解码问题以及解决方法 使用 JavaMail 包收发中文邮件时,需要考虑编码和解码的问题。在发送中文邮件时,邮件头需要进行编码,使其只包含 US-ASCII 字符。 JavaMail 包提供了 ...
使用 JavaMail 包收发中文邮件的编码、解码问题以及解决方法 JavaMail 是一个流行的 Java API,用于发送和接收电子邮件。然而,在使用 JavaMail 发送中文邮件时,可能会遇到编码和解码问题。本文将详细介绍使用 ...
在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...
"Javamail使用过程中常见问题解决方案" 在本文中,我们将详细介绍Javamail使用过程中常见问题解决方案,通过示例代码来详细介绍解决方案,对大家的学习或者工作具有一定的参考学习价值。 问题1:无法连接SMTP...
JavaMail API 是一个Java编程语言中的库,用于处理电子邮件的创建、发送和接收。这个API提供了与多种邮件协议(如SMTP、POP3、IMAP)交互的能力,同时也支持MIME标准,允许处理复杂的邮件格式,包括附件和多部分消息...
虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeans Activation Framework ...
JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送、接收和管理。在实际使用过程中,可能会遇到内存溢出(Memory Overflow)的问题,这通常是由于邮件处理...同时,借助性能分析工具,可以更好地诊断和解决问题。
在IT行业中,发送电子邮件是一项常见的任务,而JavaMail是一个广泛使用的API,用于处理与电子邮件相关的各种操作。在尝试使用JavaMail发送邮件时,如果邮件服务器要求使用SSL(Secure Socket Layer)或TLS...
JavaMail 是一个强大的开源库,用于在Java应用程序中实现电子邮件的发送和接收功能。它提供了丰富的API,使得开发者能够方便地处理SMTP、POP3、IMAP等邮件协议,支持多种邮件格式,包括文本、HTML以及带有附件的邮件...
总的来说,这个压缩包提供了一整套的JavaMail开发资源,包括最新的JavaMail库、JAF组件、详细的API文档(英文和中文),以及一个可能的中文详解。对于想要在Java环境中开发邮件功能的开发者来说,这是一个非常全面的...
本文将深入探讨JavaMail和JAF的核心功能,以及如何利用它们解决JSP中的邮件发送问题。 **JavaMail** JavaMail API是Java平台上的一个开源库,它允许开发者编写能够与邮件服务器交互的应用程序。这个API提供了丰富...
解决javamail 用imap 主题(标题)过长 会出异常
JavaMail邮件系统是一种基于Java平台的邮件发送和接收解决方案,它允许开发者通过编程方式与SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)等邮件服务器进行交互。在JavaMail中,...
JavaMail 是一个开源库,用于在Java应用程序中处理电子邮件。这个库提供了丰富的API,使得开发者可以方便地执行发送、接收、读取和管理邮件的任务。`javamail-1.6`是JavaMail的一个版本,它包含了从早期版本中继承的...
在评估目的下,开发者可以使用JavaMail API进行内部评估,如开发基于规范的应用程序,并且在不实现规范的任何部分的情况下,与第三方讨论规范,或者在讨论规范的通讯中摘录规范的简短片段,前提是这些摘录不构成规范...