Java邮件开发(三):解决附件名为乱码及显示友好名称

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

2.友好名称的显示。

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

下面解决这两个问题

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

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

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

如:张益达sohu <[email protected]>,张益达qq <[email protected]>,张益达163 <[email protected]>

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") + "\" <[email protected]>"));
		msg.setReplyTo(new Address[]{new InternetAddress("[email protected]")});
		//友好名称和邮箱地址之间不要忘了有一空格,邮箱地址之间用逗号分隔
		//如:张益达sohu <[email protected]>,张益达qq <[email protected]>,张益达163 <[email protected]>
		msg.setRecipients(RecipientType.TO,InternetAddress.parse(MimeUtility.encodeText("张益达sohu") + " <[email protected]>,"
				+ MimeUtility.encodeText("张益达qq") + " <[email protected]>,"
				+ MimeUtility.encodeText("张益达sina") + " <[email protected]>,"
				+ MimeUtility.encodeText("张益达163") + " <[email protected]>"));
		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

原文地址:https://www.cnblogs.com/achengmu/p/10955765.html

时间: 2024-11-07 01:47:32

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

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

Django邮件功能,详情可看官方文档(https://docs.djangoproject.com/en/1.10/topics/email/). 最近做这个功能时遇到的问题,发送附件,收到后中文名字乱码,解决方法如下: 需要对文件名在header中进行编码处理,否则,收到的附件中文名字会乱码. 1 from django.core.mail import EmailMessage 2 from email.header import make_header 3 4 email = Email

java邮件发送(含附件)

1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在src下面)emailsmtp=smtp.qq.com[email protected]emailpass=******2.读取配置文件的类文件(ReadPropertity.java)import java.io.IOException;import java.util.Properties;publ

java邮件开发

发送邮件依赖一个jar包 javax.mail.jar 包 用之前先把包导入http://files.cnblogs.com/files/wenjie123/javax.mail.jar.rar package com.svse;import java.io.File; /* *建立 附件类,只有文件,即附件才文件名 */ public class AttachBean { private String cid; private File file; private String fileNam

java 邮件发送多分附件

package com.sungrow.sendmail; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation

java.net.Decoder 配合java.net.Encoder使用解决url参数中文乱码问题【2014-11-17】

1.解码规则 //解释一下:解码规则对应着编码规则,类似对称加密算法 //解码规则:1.数字和字母保持原样: 2."."."-"."_"."*"保持原样:"+"号解码为" "(空一格字符串): 3.%xy根据解码编码进行解码: 2.解码方法 //解释一下:解码方法和编码方法差不多 //2个方法:decode(String s)和decode(String s,String enc) //

SSH开发中解决mysql数据库的乱码问题

(1)第一点要保证 就是创建数据库的时候 使用的编码方式 和连接数据库的 编码格式是一样的! (2)在web.xml文件中配置过滤器(由spring提供的过滤器) <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param

Java Web开发 - 将浏览器地址栏中的 Request 参数显示成中文

希望实现:在当 JSP 页面发起请求,或者 Servlet 跳转时,地址栏中的参数可以显示成中文. 在通常情况下,浏览器地址栏中的URL地址为了适配不同的浏览器,会将URL地址信息转码为"ISO 8859-1",中文参数就会被转码. 但是现在我们希望在浏览器地址栏中显示中文参数,可以使用如下办法: String url = "http://localhost:8080/test.jsp?notice=" + java.net.URLEncoder.encode(&q

java面试题 springmvc 解决post get请求乱码问题

1 post乱码 解决方法  在web.xml中添加如下 <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name&

20135231 JAVA实验报告三:敏捷开发与XP实践

---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问同学”.“看书”等一律得0分)以及分析(从中