遗留的问题有以下两个:

1.附件的名称只能为英文,中文乱码

2.友好名称的显示。

我们使用163等邮箱发送邮件时,我们经常可以看到收件人一栏中会是:张益达 这种方式。在上一版本的代码中并没有使用这样的方式。

下面解决这两个问题

1. 对于中文乱码,是因为邮件要求所有的字符必须是ascII字符,中文字符当然不可以。因此我们只需要把我们的中文全部转码就可以了。

而JavaMail提供了这样一个类:MimeUtility。使用这个类的encodeText方法就可以对中文进行编码。

2. 对于显示友好名称,我们首先要了解收件人填写时的格式。格式一般为:友好名称 ,如果有多个收件人要以逗号分割

示例代码如下

package com.zyh.demo;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.OutputStream;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.Message;

import javax.mail.Message.RecipientType;

import javax.mail.Address;

import javax.mail.Multipart;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import javax.mail.internet.MimeUtility;

import javax.mail.util.ByteArrayDataSource;

/**

* 创建一个复杂的邮件,这个邮件包括一段正文和两个附件

* 其中正文要包含一张图片

* @author Administrator

*

*/

public class Demo4 {

public static void main(String[] args) throws Exception {

Properties props = new Properties();

props.setProperty("mail.smtp.auth", "true");

props.setProperty("mail.transport.protocol", "smtp");

Session session = Session.getInstance(props);

session.setDebug(true);

Message msg = new MimeMessage(session);

/*邮件消息头设置*/

//使用MimeUtility.encodeText()方法对中文进行编码(base64或QP)

msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText("张益达sss") + "\" "));

msg.setReplyTo(new Address[]{new InternetAddress("[email protected]")});

//友好名称和邮箱地址之间不要忘了有一空格,邮箱地址之间用逗号分隔

//如:张益达sohu ,张益达qq ,张益达163

msg.setRecipients(RecipientType.TO,InternetAddress.parse(MimeUtility.encodeText("张益达sohu") + " ,"

+ MimeUtility.encodeText("张益达qq") + " ,"

+ MimeUtility.encodeText("张益达sina") + " ,"

+ MimeUtility.encodeText("张益达163") + " "));

msg.setSubject("From 163 这是一封复杂邮件");

/*邮件消息内容设置,包括两个附件和一段正文*/

Multipart msgPart = new MimeMultipart("mixed");

msg.setContent(msgPart);

MimeBodyPart body = new MimeBodyPart(); //表示正文

MimeBodyPart attach1 = new MimeBodyPart(); //表示附件1

MimeBodyPart attach2 = new MimeBodyPart(); //表示附件2

msgPart.addBodyPart(body);

msgPart.addBodyPart(attach1);

msgPart.addBodyPart(attach2);

/*以下为设置正文*/

/*正文是文字和图片混合的*/

Multipart contentPart = new MimeMultipart("related");

body.setContent(contentPart);

MimeBodyPart content = new MimeBodyPart(); //文字

MimeBodyPart img = new MimeBodyPart(); //图片

contentPart.addBodyPart(content);

contentPart.addBodyPart(img);

DataSource fileds = new ByteArrayDataSource(new FileInputStream("D:\\picture\\jpg\\touxiang.jpg"),"image/jpeg");

DataHandler imgDataHandler = new DataHandler(fileds);

img.setDataHandler(imgDataHandler);

img.setHeader("Content-ID", "");

img.setFileName(MimeUtility.encodeText("头像.jpg"));

//设置文字内容

content.setContent("

从163发来的邮件

:我这里有一张图片,好看吗?", "text/html;charset=utf-8");

/*正文内容设置结束*/

/*下面为设置附件*/

attach1.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\firefox.txt")));

attach1.setFileName(MimeUtility.encodeText("文件1.txt"));

attach2.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\java.txt")));

attach2.setFileName(MimeUtility.encodeText("file文件2.txt"));

msg.saveChanges();

OutputStream os = new FileOutputStream("E:\\demo4.eml");

msg.writeTo(os);

os.close();

Transport trans = session.getTransport();

trans.connect("smtp.163.com", 25, "zyh5540", "test");

trans.sendMessage(msg,msg.getAllRecipients());

}

}

附:

原文:http://blog.csdn.net/zyh5540/article/details/19019397

java邮件附件名称乱码_Java邮件开发(三):解决附件名为乱码及显示友好名称相关推荐

  1. java model 中文乱码_Java解压zip 解决编码和中文乱码问题

    项目由GBK转成UTF-8 遇到原有解析zip发现中文文件名称乱码问题 net.lingala.zip4j zip4j 1.3.2 package com.multek.ebuy.utils; imp ...

  2. java工程编辑器中文乱码_Java Web开发项目中中文乱码解决方法汇总

    Java Web项目中,解决中文乱码方法总结如下 第一种情况:调用jsp页面中文显示乱码问题描述:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码. 解决方法:首先确认本jsp在编辑器中保存 ...

  3. java swing 表格控件_java swing 开发 -JTable

    最近利用空闲时间自己琢磨了一下java swing 编程,其实在从事javaweb之前我一直向往的就是java swing 开发,不知道为什么可能当时觉得Windows上的exe程序很是神奇,关于wi ...

  4. java输出的汉字变成乱码_Java Web项目中解决中文乱码方法总结

    一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat:默认是ISO8859-1,不 ...

  5. java web应用 生僻字_Java Web项目中解决中文乱码方法总结

    一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat:默认是ISO8859-1,不 ...

  6. linux smtp 发送邮件乱码,使用gomail发送邮件之解决附件名乱码的问题

    在使用Go语言开发时,我们会遇到发送邮件的需求,在Go语言标准包中,也提供了邮件发送客户端smtp的封装.不过,该标准包只提供了基础的邮件发送过程,对于一些复杂的定义还需要自己去封装,封装过程就需要依 ...

  7. 怎么用java做随机选人软件_Java小程序:五人随机选一人并显示姓名

    该程序实现的是用空格键控制五个人编号的滚动(用Timer实现),当选定一个人的时候,显示其名字,具体界面如下: 此程序需要链接数据库,在此用的是Access数据库,数据链接的代码如下: import ...

  8. python爬取小说出现乱码_详解Python解决抓取内容乱码问题(decode和encode解码)

    一.乱码问题描述 经常在爬虫或者一些操作的时候,经常会出现中文乱码等问题,如下 原因是源网页编码和爬取下来后的编码格式不一致 二.利用encode与decode解决乱码问题 字符串在Python内部的 ...

  9. java 锟斤 解决乱码_java eclipse 开发中文乱码锟斤拷小锟斤拷锟

    最近在做项目的时候发现有些员工提交的代码到SVN上之后乱码了,eclipse没有乱码,乱码字样为"锟斤拷小锟斤拷锟斤拷植锟斤拷锟斤拷3146锟斤拷锟斤拷锟斤拷锟绞撅拷锟绞硷拷锟揭筹拷锟?&q ...

最新文章

  1. Maya人物角色行走动画制作视频教程
  2. java中的易混问题收集
  3. DaVinci的Buffer_Handle和BufTab Cmem函数调用
  4. HTTP系列学习(笔记三):HTTP的发展历程思维导图
  5. 局域网网管软件_局域网安全管理面临的4大挑战
  6. MTK 驱动---(13)DCT工具使用介绍
  7. 西部数据app可导致Windows 和 macOS 提权
  8. redis linux工具安装,linux 安装redis缓存工具
  9. Angular 2:Web技术发展的必然选择
  10. 在退出作用域时做一些事
  11. BAT代码表白实用详细操作
  12. PHPstudy配置局域网
  13. SwiftUI实战教程 第三章 土豆List
  14. 周易六十四卦——大畜卦
  15. 手机老是收不到短信验证码?我来告诉你为什么!
  16. access to同义替换_雅思写作高频100必备词(附高级替换)
  17. 23考研 武汉理工计算机专硕-计算机技术(085404)-22408初试记录
  18. 什么才是DOCSIS 3.1技术?
  19. 边缘计算导论——中山大学程旭老师课程总结
  20. [samba] 吐血奉献.samba安装设置!

热门文章

  1. 「备战春招/秋招系列」程序员的简历就该这样写
  2. 计算机上的游戏怎么不见了怎么办,电脑自带小游戏消失怎么找回?高手教你找回电脑自带小游戏...
  3. HTTP常见返回码(如:301,400,503)
  4. MPLS LDP简介-ielab
  5. UI设计师职业要求有哪些
  6. 视频太大怎么压缩变小?
  7. 文件操作细致详解(下)
  8. 港大计算机学院副院长,中科院许榕生教授、香港大学邹锦沛博士等一行访问我校...
  9. Ubuntu 22.04 视频播放器
  10. 甲骨文数据库购买的价格(一)