JavaMail中的国际化(一)

原创 2016年08月30日 22:41:44

JavaMail是JavaEE中13种核心技术之一,其中有不少涉及国际化的知识点,例如subject, body, attachment时间日期等。本文我们来关注邮件附件乱码问题,首先看一个真实的bug,测试步骤如下。

1. 创建一个mail notification,附件名为中文

2. 触发notification条件,发送mail并检查


结果如图所示。

一探究竟,最终我们在notification代码中找到了addAttachment方法。

public void addAttachment(NotificationAttachment attachment) {
   Assert.notNull(attachment, "Attachment was null");
   try {
	   String fileName = attachment.getFileName();
	   if (StringUtil.isNullOrEmpty(fileName)) {
fileName = DEFAULT_FILE_NAME + multipart.getCount();
	   }
	}	
	...
}

读到这里,其实我们已经破解了该问题,只要调用MimeUtility.encodeText方法对fileName进行编码即可,修改如下。

public void addAttachment(NotificationAttachment attachment) {
   Assert.notNull(attachment, "Attachment was null");
   try {
	   String fileName = attachment.getFileName();
	   if (StringUtil.isNullOrEmpty(fileName)) {
fileName = DEFAULT_FILE_NAME + multipart.getCount();
		}
		fileName = MimeUtility.encodeText(fileName);
	}	
	...
}

问题解决!不过关于MimeUtility工具类,这里仍需多说几句。该类包含一组根据RFC2047规范来对MIME头进行编码和解码的方法。但一般情况下,使用setSubject和setRecipients方法时候,编解码方法是无需使用的,JavaMail会自动进行编码和解码。这些方法只有在使用setHeader及getHeader方法操作MIME头时才需要被调用。

 

RFC 822规定邮件头只能包含ASCII字符,含有non ASCII字符的邮件头必须进行编码。所以使用Java Mail发送非英文邮件时必须经过编码,否则别人看到的邮件只能是一堆乱码。通常对邮件头的编码方式有两种,一种是base64方式编码,一种是qp(quoted-printable)方式编码,JavaMail会根据具体情况来选择相应的编码方式。

版权声明:本文为博主原创文章,未经博主允许不得转载。

JavaMail中的国际化(二)

书接前文,在解决了附件名乱码问题后,本文我们将目光转移到mail body上。   首先还是请大家先看一个bug,业务背景是这样的——当满足某种条件时,软件自动发功向用户发送alert邮件。本例中...

iOS国际化,点击切换语言

  • 2016年11月25日 08:47
  • 96KB
  • 下载

C++国际化(各种乱码的解决方案之一)

C++之国际化(1)     国际化(Internationalization,简写为i18n)     国际化的主要思路是以locale(地域、本土、国别)对象来代表一个可扩展的面貌...

Qt程序国际化(简单实用)

  • 2012年09月04日 17:22
  • 18KB
  • 下载

MVC国际化,MVC多语言,.NET多语言

  • 2015年07月09日 19:20
  • 645KB
  • 下载

SpringMVC国际化(i18n)(五)

国际化我们通常用缩写来简单,那就是i18n。它就是让我们的系统可以转换成不同的语言。为了转换成不同的言语,我们需要定义不同的文件,如:messages_en.properties,messages_e...

WEB中实现国际化(一)

最近这几天一直在写国际化和配置国际化的工具,现在将我实现国际化的思路和想法帖出来:本文主要讲一下母版页、内容页和常规页的国际化 项目结构: 一、将资源文件用XML文件(键值)的形式存储: C...

java国际资源化文件配置j2se+j2ee

j2se项目配置: 1.新建资源化文件命名格式: xxx_zh_CN.properties,xxx_en_US.properties 2.程序中获取: public String ...

java WEB开发国际化(二)

JSP 2.0: The New Deal, Part 2 by Hans Bergsten, author of JavaServer Pages, 3rd Edition,12/03/2003 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaMail中的国际化(一)
举报原因:
原因补充:

(最多只允许输入30个字)