JavaMail中的国际化(一)
来源:互联网 发布:python矩阵相乘 编辑:程序博客网 时间:2024/05/01 18:06
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会根据具体情况来选择相应的编码方式。
1 0
- JavaMail中的国际化(一)
- JavaMail中的国际化(二)
- Redis缓存中的国际化(一)
- GemFire/Geode中的国际化(一)
- javamail总结(一)
- (一)JavaMail 简介
- (一)国际化—程序名称国际化
- Xcode6 国际化(一)--应用名称国际化
- javamail收mail(一)
- JavaMail API 基础 (一)
- JavaMail邮件开发(一)
- 基于JavaMail的邮件客户端--JustLook(一、JavaMail简介)
- Eclipse Plugin 国际化 (一)
- java中的国际化(转载)
- 传智播客——JAVAMAIL(一)
- James+Javamail构建邮件服务(一)
- 邮件原理与JavaMail开发(一)
- James+Javamail构建邮件服务(一)
- 奇异值的物理意义
- spring mvc 请求转发和重定向
- 学生成绩管理设计
- 112. Path Sum
- 崔西凡JavaWeb笔记day13-day15(2016年8月30日22:40:43)
- JavaMail中的国际化(一)
- PHP面向对象的程序设计关键字--php高级最详细教程
- Android09--Android之Handler机制
- 【Linux网络编程】TCP 和 UDP 数据报格式详解
- NOIP2012 借教室 D2 T2
- 利用Mybatis拦截器对数据库水平分表
- POJ 3348 (凸包面积)
- Javascript设计模式-b惰性模式(机器学习)
- 基础知识回顾2