`

使用javamail处理中文遇到的一些棘手问题及解决方法(zt)

阅读更多
先从最棘手的来吧

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

今天先说这么多了,
分享到:
评论
2 楼 inprise_lyj 2006-11-21  
这两个类在java.util.regex目录中。
1 楼 cxy22xueyi 2006-10-09  
你好,Pattern和Matcher这两个类在哪里?qq:6307344。期待您的联系!有问题讨论。谢谢!

相关推荐

    javamail问题及解决方案

    ### JavaMail问题及解决方案 JavaMail是Java平台中用于发送和接收邮件的API,它提供了对各种邮件协议的支持,如SMTP、POP3和IMAP。然而,在实际应用中,JavaMail经常会遇到各种问题,比如连接失败、身份验证错误等...

    Android使用JavaMail后台发送邮件遇到的一些问题

    在提供的压缩包文件"libs"中,可能包含了用于Android的JavaMail库或者其他相关的工具库,这些库可以帮助开发者解决上述问题,使得邮件发送功能在Android应用中得以顺利实现。使用这些库时,确保它们与你的Android...

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

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

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

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

    使用javamail发信过程中的一些问题及解决方法 - 鹰翔宇空 - BlogJava

    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 代发邮件 使用 JavaMail 库可以轻松地在 Java 应用程序中发送电子邮件。JavaMail 是一个 Java API,用于在 Java 应用程序中发送和接收电子邮件。它提供了一个抽象层,允许开发者使用不同的电子邮件...

    JavaMail 内存溢出问题

    在实际使用过程中,可能会遇到内存溢出(Memory Overflow)的问题,这通常是由于邮件处理不当或资源管理不善导致的。本篇文章将深入探讨 JavaMail 中内存溢出问题的成因、解决策略以及相关源码分析。 一、内存溢出...

    linux服务器报警—使用javamail

    当服务器出现异常或达到预设阈值时,及时的报警系统能够帮助运维人员迅速响应并解决问题。"Linux服务器报警—使用javamail"这个主题就涉及到了如何利用JavaMail API在Linux环境中实现自动发送邮件报警的功能。...

    javamail 中文API文档

    JavaMail API是Java平台上的电子邮件解决方案,它提供了一组用于发送、接收、管理和处理电子邮件消息的API。JavaMail API主要包含以下几个核心概念:会话(Session)、消息(Message)、地址(Address)、验证程序...

    javamail使用的jar包

    以下是一些使用 JavaMail 的关键知识点: 1. **JavaMail Session**: 这是 JavaMail 的核心,用于配置邮件服务的属性,如主机名、端口号、用户名和密码。`Session.getInstance()` 方法用于创建一个 `Session` 实例。...

    JavaMail+JAF+JavaMail_API+JavaMail_API详解

    JavaMail API documentation.rar可能是JavaMail API的官方英文文档,包含了详细的类、接口和方法说明,以及使用示例。这对于开发者理解和使用JavaMail API进行邮件编程非常关键,因为它提供了全面的技术参考。 ...

    JavaMail-1.5 API

    使用JavaMail API可以编写出跨平台的邮件处理应用,而且由于Java的跨平台特性,使用JavaMail API开发的邮件应用可以部署在Windows、Linux、Unix、Mac OS等多种操作系统上。 文件中提到的“Evaluation Purposes”和...

    Android 使用javamail发送邮件

    总的来说,"Android使用javamail发送邮件"这个主题涵盖了Android平台上利用JavaMail API实现邮件发送的基本流程和注意事项,包括设置SMTP服务器、构建邮件消息、处理附件以及可能的安全性和用户体验优化。...

    Android使用JavaMail开发邮箱最新jar包集合

    5. **错误处理**:邮件操作可能会遇到各种问题,如网络中断、认证失败等,因此需要编写良好的异常处理代码,以确保应用的健壮性。 使用JavaMail开发Android邮箱应用时,你可以实现发送文本、HTML、附件,甚至嵌入...

    javamail使用demo示例

    JavaMail 是一个开源库,它为Java程序员提供了一组API,用于处理电子邮件的发送和接收。这个"javamail使用demo示例"是JavaMail官方提供的一个实例集合,旨在帮助开发者更好地理解和应用JavaMail库。下面我们将深入...

    使用jsp实现javaMail邮箱功能开发

    发送邮件可能会遇到各种问题,如网络故障、认证失败等,因此在实现过程中需要添加适当的异常处理机制,向用户提供清晰的错误信息。 7. 安全性考虑: 在实际应用中,敏感信息如SMTP凭据不应该直接硬编码在JSP或源...

    使用javaMail发送邮件

    7. mailapi.jar:可能包含了JavaMail API的一些额外实现或扩展。 为了发送邮件,首先需要创建一个`Properties`对象,并设置SMTP服务器的相关属性,例如主机名和端口号: ```java Properties props = new ...

    JavaMail基础教程(API)

    JavaMail是Java编程环境中用于处理电子邮件的一套API,它提供了丰富的功能,允许开发者发送、接收、存储和管理邮件。这个基础教程将引导你逐步了解如何使用JavaMail API进行邮件操作。 1. **JavaMail简介** ...

    javamail(带界面的javamail)

    然后,你可以使用 Transport 类的 send 方法来发送 Message 对象,该对象包含了邮件的所有内容,如发件人、收件人、主题和正文。如果邮件有附件,可以通过 MimeMessage 类和 MimeBodyPart 类来添加。 对于邮件接收...

Global site tag (gtag.js) - Google Analytics