`
java小牛
  • 浏览: 7211 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JavaMail发送中文邮件中主题乱码的解决方法

阅读更多

我们的程序经常会出现这样一个问题,在WinXp下测试是正常的,而到了服务器(Linux操作系统)上就出现这个问题。


    1、    由于邮件我写的程序的邮件主题是写在配置文件(. properties)中的,再通过native2ascii把中文邮件主题从本地码(简 体中文Wind Xp 是GBK)转换为Unicode 编码。而Java程序读取properties配置文件内容时,是根据操作的编码方式来读取的, 这样就造成程序的可移植性差。
    2、    没有指定邮件主题的编码方式
    当一段 Text 或者 HTML 通过电子邮件传送时,发送的内容首先通过一种指定的字符编码转化成“字节串”,然后再把“字节串”通过一种指定的传输 编码(Content-Transfer-Encoding)进行转化得到另一串“字节串”。比如,打开一封电子邮件源代码,可以看到类似的内容:
Content-Type: text/plain;charset="gb2312"
Content-Transfer-Encoding: base64
sbG+qcrQuqO17cf4yee74bGjz9W7+b3wudzA7dbQ0MQNCg0KvPKzxqO6uqO17cnnsaPW0NDEDQoNCg==
最 常用的 Content-Transfer-Encoding 有 Base64 和 Quoted-Printable 两种。在对二进制文件或者中文 文本进行转化时,Base64 得到的“字节串”比 Quoted-Printable 更短。在对英文文本进行转化时,Quoted- Printable 得到的“字节串”比 Base64 更短。
    邮件的标题,用了一种更简短的格式来标注“字符编码”和“传输编码”。比如,标题内容为 "中",则在邮件源代码中表示为:
// 正确的标题格式
Subject: =?GB2312?B?1tA=?=
其中,
第一个“=?”与“?”中间的部分指定了字符编码,在这个例子中指定的是 GB2312。 
“?”与“?”中间的“B”代表 Base64。如果是“Q”则代表 Quoted-Printable。 
最后“?”与“?=”之间的部分,就是经过 GB2312 转化成字节串,再经过Base64 转化后的标题内容。 
如果“传输编码”改为 Quoted-Printable,同样,如果标题内容为 "中":
// 正确的标题格式
Subject: =?GB2312?Q?=D6=D0?=
    如果阅读邮件时出现乱码,一般是因为“字符编码”或“传输编码”指定有误,或者是没有指定。比如,有的发邮件组件在发送邮件时,标题 "中":
// 错误的标题格式
Subject: =?ISO-8859-1?Q?=D6=D0?=
这样的表示,实际上是明确指明了标题为 [0x00D6, 0x00D0],即 "ÖÐ",而不是 "中"。
    3、    解决方法
(1):修改操作系统编码方式为GBK,或在服务器上通过native2ascii把邮件主题重新生成Unicode 编码,并更新配置文件内容;
(2):给邮件主题指定编码方式:
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();  
msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");

分享到:
评论

相关推荐

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

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

    javamail发送邮件 主题乱码解决

    第90行,setSubject("")

    javamail发送html邮件

    JavaMail API 是一个用于发送、接收电子邮件的标准接口集合,它支持多种协议(如 SMTP、IMAP 和 POP3),使得 Java 应用程序能够轻松地发送和接收电子邮件。 #### 二、发送 HTML 格式的邮件 在实际应用中,经常需要...

    james和javamail实现邮件收发(带发送附件)

    下面是一个简化的JavaMail发送邮件的过程: 1. **配置邮件会话**:首先,我们需要创建一个`Properties`对象,并设置SMTP服务器的相关参数,如主机名和端口号。然后,通过`Session.getInstance()`方法初始化一个邮件...

    JavaMail结合JSP实现中文邮件收发系统.rar

    在JavaMail邮件发送的Servlet中,开发者会使用`Session`对象来获取邮件服务器的连接,然后创建`MimeMessage`对象,设置邮件属性,最后通过`Transport.send()`方法发送邮件。 在接收邮件方面,通常会使用IMAP或POP3...

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

    在设置邮件主题或正文时,必须确保使用正确的字符编码(如UTF-8),并使用MimeUtility的encodeText方法对特殊字符进行编码,以避免乱码问题。 5. **异常处理**: 在发送邮件过程中,可能会遇到网络问题、服务器拒绝...

    javamail 邮件系统

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

    使用JavaMail发送复杂邮件源代码

    利用JavaMail进行邮件开发的发邮件的源代码,其中有四个例子,demo1/demo2是发送简单的邮件,demo3是发送一封html格式(正文为html格式,html代码中有一张图片)带附件的邮件。demo4是对demo3的补充,解决了附件的...

    JavaMail 发送邮件

    JavaMail 是一个开源的 Java 库,用于在 Java 应用程序中发送和接收电子邮件。它提供了丰富的 API,使得开发者可以方便地实现 SMTP、POP3 和 IMAP 协议的功能,进行邮件的发送、接收、读取和管理。在本文中,我们将...

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

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

    SpringBoot mail中文附件乱码的解决方法

    SpringBoot mail中文附件乱码的解决方法 邮件附件中文乱码问题 在使用 SpringBoot 发送邮件时,经常会遇到附件名称中文乱码的问题。本文将详细介绍解决此问题的方法。 问题分析 在发送邮件时,我们需要将附件...

    JavaMail开发原理简介PPT

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

    javaMail.zip

    使用JavaMail发送邮件的一般步骤如下: 1. **初始化 Session**:首先,你需要创建一个 `Properties` 对象,并设置SMTP服务器的相关属性,如主机名(host)、端口号(port),如果是SSL或TLS安全连接,还需要开启...

    Javamail开发

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

    spring整合freemarker发送邮件例子

    在JavaMail中,可以使用 `MimeMessage` 的 `setEncoding` 方法设置邮件的字符集,确保内容正确显示。同时,对于非ASCII字符,如中文,也需要确保邮件头部(如主题)和邮件内容都使用相同的字符集。 8. **Spring配置...

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

    ### JavaMail 发送带附件及内嵌图片的邮件 #### 一、概述 在现代通讯方式中,电子邮件依然占据着重要的地位,特别是在企业级应用中。JavaMail API 是 Java 平台上广泛使用的邮件处理库之一,它允许开发人员通过...

    JavaMail组件在网站用户注册系统中的应用.pdf

    JavaMail组件是Java编程中用于处理电子邮件的API,它允许开发者创建、发送和接收电子邮件。在网站用户注册系统中,JavaMail组件通常用于验证用户身份和增强安全性。例如,当用户注册新账户时,系统会自动生成一个...

    javamail资料

    JavaMail 是一个开源的 Java 库,用于在 Java 应用程序中实现电子邮件的发送和接收。它提供了全面的 API,使得开发者可以处理 SMTP、POP3 和 IMAP 协议,实现了邮件服务的各种功能,包括附件、HTML 内容、多部分消息...

    简单的javamail例子 (源码)

    - **邮件信息获取**:使用 `request.getParameter()` 方法从 HTTP 请求中获取发件人、收件人、邮件主题和邮件内容等信息。 - **邮件发送逻辑**:使用 JavaMail API 发送邮件。 ```java // 设置邮件服务器属性 ...

Global site tag (gtag.js) - Google Analytics