先从最棘手的来吧
1.如何正确显示邮件内容为中文明码而且Content-Type里没有指定charset的邮件
据我所知,新浪发出的邮件都是这样的,我的youmail里无法正确显示,为乱码.后来分析内容,才知道是他们的邮件里没有指定charset..
邮件内容部分如:
From: hrbtvu_ly <foo@sina.com>
To: foo@mail.foo.com
Subject: 你好啊
MIME-Version: 1.0
Date: Thu, 11 Nov 2004 12:51:30 +0800
X-Mailer: SinaMail 3.0Beta (FireToad)
X-Priority: 3
X-Antivirus-MYDOMAIN-1.22-st-qms: added fake Content-Type header
Content-Type: textplain
你好啊
可以看出连标题都是中文明码的,这个我后面讲到如何处理.
我的解决方法是:修改com.sun.mail.handlers.text_plain类的getCharset(),修改成:
private String getCharset(String s)
{
try
{
ContentType contenttype = new ContentType(s);
String s1 = contenttype.getParameter("charset");
if(s1 == null)
s1 = "gb2312";
return MimeUtility.javaCharset(s1);
}
catch(Exception _ex)
{
return "gb2312";
}
}
这是我认为最简单的办法了.
2.Subject或其他字段为中文明码的处理
这里我提供我写的一个方法,能够统一处理编码过的或者明文的字符串:
/**
* 返回解码后的字符串
*/
public static String getDecodeText(String eword) {
if (eword == null) return null;
try {
Pattern p = Pattern.compile("=\\?.+\\?=");
Matcher m = p.matcher(eword);
StringBuffer sb = new StringBuffer();
boolean result = m.find();
if (result) {
while (result) {
m.appendReplacement(sb, MimeUtility.decodeText(m.group()));
result = m.find();
}
m.appendTail(sb);
return sb.toString();
} else {
String decodevalue = new String(eword.getBytes("ISO8859-1"), "GBK");
return decodevalue;
}
} catch (Exception e) {
e.printStackTrace();
return eword;
}
}
3.发送邮件中中文的处理
邮件标题: newmsg.setSubject(subject, "GBK");
附件:
BASE64Encoder enc = new BASE64Encoder();
mbp2.setFileName("=?GBK?B?" + enc.encode((new String(ai.getFileName()).getBytes("GBK"))) + "?=");
这只是给出一个方法,具体你还要自己改一改
内容:msg.setContent(body, "text/plain;CHARSET=utf8");
主要原则是处处指定charset
今天先说这么多了,
分享到:
相关推荐
### JavaMail问题及解决方案 JavaMail是Java平台中用于发送和接收邮件的API,它提供了对各种邮件协议的支持,如SMTP、POP3和IMAP。然而,在实际应用中,JavaMail经常会遇到各种问题,比如连接失败、身份验证错误等...
在提供的压缩包文件"libs"中,可能包含了用于Android的JavaMail库或者其他相关的工具库,这些库可以帮助开发者解决上述问题,使得邮件发送功能在Android应用中得以顺利实现。使用这些库时,确保它们与你的Android...
使用 JavaMail 包收发中文邮件的编码、解码问题以及解决方法 JavaMail 是一个流行的 Java API,用于发送和接收电子邮件。然而,在使用 JavaMail 发送中文邮件时,可能会遇到编码和解码问题。本文将详细介绍使用 ...
使用 JavaMail 包收发中文邮件的编码、解码问题以及解决方法 使用 JavaMail 包收发中文邮件时,需要考虑编码和解码的问题。在发送中文邮件时,邮件头需要进行编码,使其只包含 US-ASCII 字符。 JavaMail 包提供了 ...
package com.hyq.test; import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class MailExample { ... public static void main (String args[]) throws Exception { ........
使用 JavaMail 代发邮件 使用 JavaMail 库可以轻松地在 Java 应用程序中发送电子邮件。JavaMail 是一个 Java API,用于在 Java 应用程序中发送和接收电子邮件。它提供了一个抽象层,允许开发者使用不同的电子邮件...
在实际使用过程中,可能会遇到内存溢出(Memory Overflow)的问题,这通常是由于邮件处理不当或资源管理不善导致的。本篇文章将深入探讨 JavaMail 中内存溢出问题的成因、解决策略以及相关源码分析。 一、内存溢出...
当服务器出现异常或达到预设阈值时,及时的报警系统能够帮助运维人员迅速响应并解决问题。"Linux服务器报警—使用javamail"这个主题就涉及到了如何利用JavaMail API在Linux环境中实现自动发送邮件报警的功能。...
JavaMail API是Java平台上的电子邮件解决方案,它提供了一组用于发送、接收、管理和处理电子邮件消息的API。JavaMail API主要包含以下几个核心概念:会话(Session)、消息(Message)、地址(Address)、验证程序...
以下是一些使用 JavaMail 的关键知识点: 1. **JavaMail Session**: 这是 JavaMail 的核心,用于配置邮件服务的属性,如主机名、端口号、用户名和密码。`Session.getInstance()` 方法用于创建一个 `Session` 实例。...
JavaMail API documentation.rar可能是JavaMail API的官方英文文档,包含了详细的类、接口和方法说明,以及使用示例。这对于开发者理解和使用JavaMail API进行邮件编程非常关键,因为它提供了全面的技术参考。 ...
使用JavaMail API可以编写出跨平台的邮件处理应用,而且由于Java的跨平台特性,使用JavaMail API开发的邮件应用可以部署在Windows、Linux、Unix、Mac OS等多种操作系统上。 文件中提到的“Evaluation Purposes”和...
总的来说,"Android使用javamail发送邮件"这个主题涵盖了Android平台上利用JavaMail API实现邮件发送的基本流程和注意事项,包括设置SMTP服务器、构建邮件消息、处理附件以及可能的安全性和用户体验优化。...
5. **错误处理**:邮件操作可能会遇到各种问题,如网络中断、认证失败等,因此需要编写良好的异常处理代码,以确保应用的健壮性。 使用JavaMail开发Android邮箱应用时,你可以实现发送文本、HTML、附件,甚至嵌入...
JavaMail 是一个开源库,它为Java程序员提供了一组API,用于处理电子邮件的发送和接收。这个"javamail使用demo示例"是JavaMail官方提供的一个实例集合,旨在帮助开发者更好地理解和应用JavaMail库。下面我们将深入...
发送邮件可能会遇到各种问题,如网络故障、认证失败等,因此在实现过程中需要添加适当的异常处理机制,向用户提供清晰的错误信息。 7. 安全性考虑: 在实际应用中,敏感信息如SMTP凭据不应该直接硬编码在JSP或源...
7. mailapi.jar:可能包含了JavaMail API的一些额外实现或扩展。 为了发送邮件,首先需要创建一个`Properties`对象,并设置SMTP服务器的相关属性,例如主机名和端口号: ```java Properties props = new ...
JavaMail是Java编程环境中用于处理电子邮件的一套API,它提供了丰富的功能,允许开发者发送、接收、存储和管理邮件。这个基础教程将引导你逐步了解如何使用JavaMail API进行邮件操作。 1. **JavaMail简介** ...
然后,你可以使用 Transport 类的 send 方法来发送 Message 对象,该对象包含了邮件的所有内容,如发件人、收件人、主题和正文。如果邮件有附件,可以通过 MimeMessage 类和 MimeBodyPart 类来添加。 对于邮件接收...