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

2.友好名称的显示。

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

下面解决这两个问题

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

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

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

如:张益达sohu <zyh5540@sohu.com>,张益达qq <554077931@qq.com>,张益达163 <zyh5540@163.com>

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") + "\" <zyh5540@163.com>"));
msg.setReplyTo(new Address[]{new InternetAddress("zyh5540@163.com")});
//友好名称和邮箱地址之间不要忘了有一空格,邮箱地址之间用逗号分隔
//如:张益达sohu <zyh5540@sohu.com>,张益达qq <554077931@qq.com>,张益达163 <zyh5540@163.com>
msg.setRecipients(RecipientType.TO,InternetAddress.parse(MimeUtility.encodeText("张益达sohu") + " <zyh5540@sohu.com>,"
+ MimeUtility.encodeText("张益达qq") + " <554077931@qq.com>,"
+ MimeUtility.encodeText("张益达sina") + " <zyh5540@sina.com>,"
+ MimeUtility.encodeText("张益达163") + " <zyh5540@163.com>"));
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", "<touxiang.jpg>");
img.setFileName(MimeUtility.encodeText("头像.jpg"));
//设置文字内容
content.setContent("<div style='color:red;font-size:18px;'>从163发来的邮件</div>:我这里有一张图片<img src='cid:touxiang.jpg' alt='touxiang' width=\"100px\" height='100px' />,好看吗?", "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());
}
}

  

https://blog.csdn.net/zyh5540/article/details/19019397

Java邮件开发(三):解决附件名为乱码及显示友好名称的更多相关文章

  1. Django 邮件推送 解决附件中文名字乱码

    Django邮件功能,详情可看官方文档(https://docs.djangoproject.com/en/1.10/topics/email/). 最近做这个功能时遇到的问题,发送附件,收到后中文名 ...

  2. 传智播客张孝祥java邮件开发随笔01

    01_传智播客张孝祥java邮件开发_课程价值与目标介绍 02_传智播客张孝祥java邮件开发_邮件方面的基本常识 03_传智播客张孝祥java邮件开发_手工体验smtp和pop3协议 第3课时 关于 ...

  3. java邮件发送(含附件)

    1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在sr ...

  4. 下载的附件名总乱码?你该去读一下 RFC 文档了!

    纸上得来终觉浅,绝知此事要躬行 Web 开发过程中,相信大家都遇到过附件下载的场景,其中,各浏览器下载后的文件名中文乱码问题或许一度让你苦恼不已. 网上搜索一下,大部分都是通过Request Head ...

  5. java邮件开发

    一.邮件协议: (重点)SMTP:发送邮件的协议.Simple Message Transfer Protocal.默认端口:25 POP:邮局协议(收件协议).Post Office Protoca ...

  6. PHPMailer发送邮件中文附件名是乱码

    可能使用了PHPMailer发送邮件的朋友带中文附件名时会出现乱码,下面我来介绍一个解决办法. 比如我们要发送的附件是"测试.txt",如果在添加附件的时候强制使用指定文件名的方式 ...

  7. 在Bootstrap开发中解决Tab标签页切换图表显示问题

    在做响应式页面的时候,往往需要考虑更多尺寸设备的界面兼容性,一般不能写死像素,以便能够使得界面元素能够根据设备的不同进行动态调整,但往往有时候还是碰到一些问题,如Tab标签第一页面正常显示,但是切换其 ...

  8. Java邮件开发(JavaMail)

    Sun发布的用来处理email的API,它可以方便地执行一些常用的邮件传输.JavaMail API是Sun公司为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一 ...

  9. 携程Java后台开发三面面经

    前言 携程是我面试的第一个互联网公司,投递的岗位是后台开发实习生,总共面了三面,止步于人才库.中间兜兜转转,复杂的心理活动,不足与外人道也.唯有面试的技术部分与大家共享. 宣讲会完了之后有个手写代码的 ...

随机推荐

  1. fwrite & fread 的使用

    每一次切换文件操作模式必须调用fclose关闭文件. 如果直接切换操作模式,文件将损坏(出现乱码)或操作失败. 在调用了fclose时,作为参数的文件指针将被回收,必须再次定义,因此最好将功能封装. ...

  2. Matplotlib:绘图和可视化

    Matplotlib:绘图和可视化 简介 简单绘制线形图 plot函数 支持图类型 保存图表 一 .简介 Matplotlib是一个强大的Python绘图和数据可视化的工具包.数据可视化也是我们数据分 ...

  3. 关于goquery的“non-standard import”错误

    goquery运行缺包就用get github.com\andybalholm\cascadia下到gopath,然后出现“non-standard import”错误,说明github.com\an ...

  4. Spring MVC传输对象属性

    今天搬砖时遇到一个问题,前端使用JSP+form传输数据,后台使用Spring MVC接收,但是接收到的对象属性一直是null,找了好久才发现原因,代码如下 前端代码   后端代码   需要注意一点 ...

  5. asp.net core 一个中小型项目实战的起手式——Swagger配置

    交流群:863563315 一.Swagger是什么 Swagger 是一款RESTFUL接口的.基于YAML.JSON语言的文档在线自动生成.代码自动生成的工具. 二.如何在项目中加入Swagger ...

  6. ERROR: Cannot uninstall 'chardet'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

    pip 安装 docker库报错: ERROR: Cannot uninstall 'chardet'. It is a distutils installed project and thus we ...

  7. vue routes路由

    mode: 'history',去掉浏览器上url前的#号

  8. [LeetCode] 5. 最长回文子串 ☆☆☆(最长子串、动态规划)

    最长回文子串 (动态规划法.中心扩展算法) https://leetcode-cn.com/problems/longest-palindromic-substring/solution/xiang- ...

  9. [LeetCode] 72. 编辑距离 ☆☆☆☆☆(动态规划)

    https://leetcode-cn.com/problems/edit-distance/solution/bian-ji-ju-chi-mian-shi-ti-xiang-jie-by-labu ...

  10. 前后端分离架构:Web实现前后端分离,前后端解耦

    一.前言 ”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦.并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构 ...