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

使用JavaMail发送邮件 前言:使用java发送邮件,首先要引入相关类,主要是封装邮件SMTP协议的一些工具 我用的是Gradle 所以把下面这句话粘贴到 工程下/build.gradle的dependencies{ // https://mvnrepository.com/artifact/com.sun.mail/javax.mail compile group: 'com.sun.mail', name: 'j... 阅读详情
我们的程序经常会出现这样一个问题,在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())+"?=");


建议:带有中文的配置文件,尽量不用*. properties文件,而用XML文件替代。
【STC32G12K128开发板】——从零到一:Keil C251开发环境全攻略 本文详细介绍了为STC32G12K128开发板搭建Keil C251开发环境的完整流程。从环境准备、软件安装、驱动配置到创建第一个工程并下载程序,提供了避坑指南和实用技巧,帮助开发者高效入门这款基于251内核的国产32位单片机开发。 阅读详情

相关推荐

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照下面进行详细步骤说明,感兴趣的同学可以看一下: 1简单示例(一条线): 2.数据源随着时间不断变化,进度条变化 。多条线: 3.看在整段时期内的数据大体图(消去或出现)进度条: 4.后台将时刻记录变化记录到一个txt文本里以供详细校验: 话不多说上码: using System; using Sys...

帅boy的博客 4308

解决JavaMail发送邮件,主题乱码现象

<br />在项目中使用javamail发送邮件总是出现主题乱码现象,而且主题使用了Base64进行了编码,依旧如故。代码如下:<br />// 根据session创建一个邮件消息<br />   Message mailMessage = new MimeMessage(sendMailSession);<br />   // 创建邮件发送者地址<br />   Address from = new InternetAddress(mailInfo.getFromAddress());<br />   /

wang12的专栏 1万+

实战测评:4大搜索API(You.com/Tavily/Exa/Perplexity)谁更适合你的AI项目?附Python调用代码

本文实战测评了You.com、Tavily、Exa和Perplexity四大搜索API在AI项目中的集成应用,详细对比了它们的技术特性和Python调用方法。针对LLM实时数据需求,You.com的优化设计表现突出,支持32k大上下文窗口和快速响应。文章提供了完整的代码示例和场景化选型建议,帮助开发者高效集成搜索API到AI项目中。

weixin_42569329的博客 482

字符,字节和编码

级别:初级摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。引言“字符与编码”是一个被经常讨论的话题。即使这样,时常出现的乱码仍然困扰着大家。虽然我们有很多的办法可以用来消除乱码,但我们并

levin9的专栏 2822

【四足机器人项目实战】MIT无刷电机FOC硬件电路设计

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、MCU最小系统--STM32F446RE1.usb串口通讯连接口+程序下载连接口2.MCU电源滤波二、磁编码器角度传感器三、三相驱动桥四、CAN通讯收发器电路五、温度ADC检测六、电源滤波及分压电路1、DC电源输入端2、DC电源滤波电路3、DC电源分压电路4、三相绕线接线端总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对

qq_35635374的博客 7066

【误码率仿真】基于matlab 小波变换OFDM误码率仿真

其中,与传统的 OFDM 相比,小波变换 OFDM 在进行调制和解调时,使用的是小波变换函数。需要注意的是,由于小波变换函数将频域信号转换为时域信号,因此与传统 OFDM 不同,小波变换 OFDM 中的信号需要在时域上添加循环前缀。与传统的 OFDM 不同,小波变换 OFDM 使用小波函数作为基函数,而非正弦函数作为基函数,因此可以在保持子载波正交性的同时,让子载波之间的带宽变得更加均匀。在频域进行信号加权,然后进行小波逆变换,得到时域信号。在接收端进行信号接收,去掉循环前缀并进行小波变换得到频域信号。

Fanjufei的博客 662

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

我们的程序经常会出现这样一个问题,在WinXp下测试是正常的,而到了服务器(Linux操作系统)上就出现这个问题。1、    由于邮件我写的程序的邮件主题是写在配置文件(. properties)中的,再通过native2ascii把中文邮件主题从本地码(简体中文Wind Xp 是GBK)转换为Unicode 编码。而Java程序读取properties配置文件内容时,是根据操作的编码方式来读取的

eyejava的专栏 1488

算法 | A*算法实现最优路径规划

启发式探索是利用问题拥有的启发信息来引导搜索,达到减少探索范围、降低问题复杂度的目的。A*寻路算法是启发式探索的一个典型实践,在寻路搜索的过程中,给每个节点绑定了一个估计值(即启发式),在对节点的遍历过程中采取估计值优先原则,估计值更优的节点会被优先遍历。...

不断学习,不断进步,提高自己 6630

javamail发邮件主题乱码问题

Javamail发送邮件,在本地主机上运行正常,将项目部署到服务器之后邮件主题出现中文乱码,网上找到解决方案如下: 将msg.setSubject(subject);改为:     msg.setSubject(MimeUtility.encodeText(subject,MimeUtility.mimeCharset("gb2312"), null)); 完美解决。  ...

www.wangpeng.cn 1479

使用Python,OpenCV查找图像中的最亮点

这篇博客展示了,为什么在图像中找到最亮的点之前应用高斯模糊是至关重要的。 通过应用高斯模糊,可以将每个给定半径内的像素平均在一起。取平均值可以去除高频噪声,否则会影响cv2.minMaxLoc函数的结果。 一定要研究高斯模糊半径的恰当值。如果取值太小,将会减轻平均值的影响,而忽略了更大、更亮的区域。但是如果半径太大,将无法探测到小的明亮区域。

qq_40985985的博客 3809

ComfyUI 局部重绘工作流示例

本文介绍了使用ComfyUI进行图像局部重绘的基础工作流程,重点讲解如何修改人物眼睛颜色和表情。主要内容包括:1.准备工作(可选下载DreamShaperv8模型);2.加载素材图片和工作流文件;3.使用遮罩编辑器绘制需要修改的区域;4.修改提示词控制生成内容;5.调整denoise参数优化效果。教程提供了详细的提示词示例(如"smile,blackeyes"等)和参数设置建议,帮助用户通过多次尝试获得理想效果。该工作流适用于修改图像局部区域而不影响整体画面。

云域A的博客 333

java 邮件发送乱码_JavaMail发送邮件(附实例及乱码问题解决)

下边是我写的一个mailTest的类实现。亲测有效;这里是以163邮箱为例,文章的后边会记录几个我本人遇到的问题。也希望可以帮助到你;package com.utils;import javax.mail.Address;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.PasswordAuthe...

weixin_33623134的博客 1289

PCL 提取两片点云的非重叠部分【2025最新版】

PCL 提取两片点云的非重叠部分。博客长期更新,本文最近一次更新时间为:2025年9月1日。

点云侠的博客 36万+

javax.mail 发送中文主题subject中文乱码

subject是一个中文的字符串,用javax.mail发送邮件设置主题的时候,默认是这样写代码的 msg.setSubject(subject); 但是收到邮件后,发现中文是乱码 解决办法, String encodedSubject = MimeUtility.encodeText(subject, MimeUtility.mimeCharset("gb2312"),

liushaoming 3285

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java 发送邮件demo_javamail 发送邮件demo

packagecom.suntray.test;importjavax.mail.BodyPart;importjavax.mail.Message;importjavax.mail.Multipart;importjavax.mail.Session;importjavax.mail.Transport;import javax.mail.internet.*;import java.util....

weixin_39644614的博客 181

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

spring mail 发送邮件,没有主题,没有收件人,显示乱码问题

使用spring框架风中的javamail发送邮件,遇到了一些问题。其中出现发送的邮件没有主题,没有收件人,内容显示乱码,这个问题困扰了一段时间。如在正文内容中出现: [code="java"] ------=_Part_28_672081.1331004489329 Content-Type: multipart/related; boundary="----=_Part_29_21386...

Jayke Lin 402

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JavaMail邮件主题乱码的解决方法

很多朋友都使用过JavaMail进行邮件发送,在邮件正文中的乱码容易解决。但邮件主题的乱码无论怎样转码总是显示一堆乱码。到底应该怎么处理呢? JavaMail中的邮件主题需要进行BASE64编码,格式形如: =?GB2312?B?xPq1xMPcwuvS0b6t1tjWw6Osx+u+ob/stcfCvKOssqLQ3rjEw9zC66Oh?= 所以,直接使用msg.setSubject(

鲤鱼商城 4188

java mail 主题 乱码_JavaMail邮件主题乱码的解决方法

很多朋友都使用过javaMail进行邮件发送,在邮件正文中的乱码容易解决。但邮件主题的乱码无论怎样转码总是显示一堆乱码。到底应该怎么处理呢?JavaMail中的邮件主题需要进行BASE64编码,格式形如:=?GB2312?B?xPq1xMPcwuvS0b6t1tjWw6Osx+u+ob/stcfCvKOssqLQ3rjEw9zC66Oh?=http://www.gaodaima.com/41119...

weixin_35810223的博客 772

javamail发送邮件时附件名显示为乱码的解决

在使用javamail api开发邮件服务系统时,我们常常会碰到中文乱码问题。发送名称含中文的附件到邮件服务器,用别的邮件接收程序接收到的附件名显示为乱码解决办法:在调用MimeBodyPart的setFileName()时使用MimeUtility进行编码。例如:// mbp为BodyPart实例//fds为FileDataSource实例 mbp.setFileName(MimeUtility

stuart_zhu的专栏 3809

JavaMail发送邮件,附件中文乱码原因解析及解决方案

JavaMail文件名乱码

wl1411956542的博客 7375

javamail 发送邮件 内容乱码问题的解决

转:javamail 发送邮件 内容乱码问题的解决   很少写博客,今天必须得把这个情况写下来。。。。搞了一天。 BUG描述:本地测试,正常发送邮件。部署到linux服务器(无中文)后,发送邮件无主题,无收件人,正文中是乱码。   我有一篇文章http://www.cnblogs.com/XL-Liang/articles/2843937.html,介绍的是如何使用javamail发送邮件...

yanghengtao的专栏 954

JavaMail发送邮件和附件(源码)

JavaMail是Sun发布的处理电子邮件的应用程序接口,它预置了一些最常用的邮件传送协议的实现方法,并且提供了很容易的方法去调用它们。JavaMail是Sun发布的应用程序接口,所以目前它还没有被JDK包含。因此你需要从Sun的官方网站上下载到JavaMail类文件包。除此之外还需要Sun的JAF(JavaBeans Activation Framework ),否则JavaMail将不能运行。

走向架构师之路 8722
上一篇: FileInputStream读取文件
下一篇: oracal增删改表字段
xiaoj13
博客等级 码龄18年 4粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值