使用javaMail发送复杂邮件,支持附件发送

简介: 在javaMail中整个邮件是由一个一个的BodyPart组成的,每一个BoydPart的内容可以是简单的普通文本,或超文本,或是一个附件,也可以是复杂的一个Multipart,然后Multipart中又可以嵌套多个BodyPart和Multipart。

在javaMail中整个邮件是由一个一个的BodyPart组成的,每一个BoydPart的内容可以是简单的普通文本,或超文本,或是一个附件,也可以是复杂的一个Multipart,然后Multipart中又可以嵌套多个BodyPart和Multipart。

 

下面是使用javaMail构造一封复杂的邮件,并发送该邮件。

import java.io.File;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class Email4 {

	public static void main(String args[]) throws AddressException, MessagingException {
		
		Properties props = new Properties();
		//发送邮件的服务器
		props.setProperty("mail.smtp.host", "smtp.qq.com");
		//发送邮件的协议
		props.setProperty("mail.transport.protocol", "smtp");
		//在连接服务器的时候是否需要验证,发邮件是需要验证的
		props.setProperty("mail.smtp.auth", "true");
		//用户名
		final String username = "1111111111@qq.com";
		//密码
		final String password = "11111111111";
		
		//利用上述的用户名和密码构造一个Authenticator对象,并把它给Session,
		//当需要进行验证的时候,会自动从Session中去取该Authenticator对象
		Authenticator authenticator = new Authenticator() {

			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				// TODO Auto-generated method stub
				return new PasswordAuthentication(username, password);
			}
			
		};
		//利用上述提供给系统的属性和Authenticator构造一个Session对象
		Session session = Session.getInstance(props, authenticator);
		//设为true,可以看到发送邮件的整个过程
		session.setDebug(true);
		//利用配好配置信息的Session新建一封邮件
		Message message = new MimeMessage(session);
		//设置邮件的发送者
		message.setFrom(new InternetAddress("111111111111@qq.com"));
		//邮件的主题
		message.setSubject("Sending Email Test!");
		Address[] recipients = InternetAddress.parse("*************@sohu.com");
		//收邮件的人,如果有抄送,密送的,可以类似的设置,只是把RecipientType改为相应的类型
		message.setRecipients(RecipientType.TO, recipients);
		BodyPart part1 = new MimeBodyPart();
		BodyPart part2 = new MimeBodyPart();
		BodyPart part3 = new MimeBodyPart();
		BodyPart part4 = new MimeBodyPart();
		BodyPart part5 = new MimeBodyPart();
		//设置内容为html
		part1.setContent("<div style='font-size:large;font-weight:bold;color:red;height:50px;border:1px solid blue;'>HELLO WORLD;你好,世界</div>", "text/html;charset=utf-8");
		//设置内容为普通文本
		part2.setText("你好,Part2");
		//将一个bodyPart加到最前面
		part3.setText("Hello Part3");
		
		
		/**
		 * 发送一个附件的情况
		 */
		//设置附件
		//DataSource是对附件的封装,是一个接口,系统已经实现的子类有URLDataSource, DataHandlerDataSource, FileDataSource
		//里面封装了各种与附件有关的方法,包括获取附件的InputStream
		DataSource dataSource = new FileDataSource(new File("E:\\doc.sql"));
		//DataHandler是对DataSource的封装,可以把Stream转换为String,
		DataHandler dataHandler = new DataHandler(dataSource);
		part4.setDataHandler(dataHandler);
		//附件的名称,默认为content,如果文件名不加扩展名在进行附件下载的时候系统会不知道该附件是什么类型的附件,
		//这样在不清楚文件类型的情况下,文件有可能是打不开的
		part4.setFileName("doc.sql");
		
		/**
		 * 发送多个附件的情况
		 */
		Multipart attachments = new MimeMultipart();
		BodyPart attach1 = new MimeBodyPart();
		//设置附件1的内容
		DataSource dataSource_attach1 = new FileDataSource(new File("E:\\doc.sql"));
		DataHandler dataHandler_attach1 = new DataHandler(dataSource_attach1);
		attach1.setDataHandler(dataHandler_attach1);
		attach1.setFileName("attach1_doc.sql");
		BodyPart attach2 = new MimeBodyPart();
		//设置附件2的内容
		DataSource dataSource_attach2 = new FileDataSource(new File("E:\\doc.sql"));
		DataHandler dataHandler_attach2 = new DataHandler(dataSource_attach2);
		attach2.setDataHandler(dataHandler_attach2);
		attach2.setFileName("attach2_doc.sql");
		attachments.addBodyPart(attach1);
		attachments.addBodyPart(attach2);
		part5.setContent(attachments);
		
		Multipart multipart = new MimeMultipart();
		multipart.addBodyPart(part1);
		multipart.addBodyPart(part2);
		multipart.addBodyPart(part3,0);
		multipart.addBodyPart(part4);
		multipart.addBodyPart(part5);
		message.setContent(multipart);
		Transport.send(message);//发送
		
	}
	
}

 

目录
相关文章
|
存储 SQL Oracle
Oracle存储过程中如何使用数组(附范例)
Oracle存储过程中如何使用数组(附范例)
|
安全 Java Linux
Android反编译——jadx工具
Android反编译——jadx工具
1199 1
|
SQL 安全 数据挖掘
Acunetix 12-Web漏洞扫描初体验
Acunetix 12-Web漏洞扫描初体验
Acunetix 12-Web漏洞扫描初体验
|
前端开发 JavaScript 关系型数据库
如何开发一个ERP系统:从零开始构建
【9月更文第4天】企业资源计划(ERP)系统是现代企业管理不可或缺的一部分,它集成了公司的关键业务流程,并提供了统一的数据管理平台。本文将探讨如何从零开始构建一个简单的ERP系统,并提供一些基本的代码示例来演示关键组件的开发过程。
2132 3
|
存储 SQL 分布式计算
MaxCompute产品使用问题之如何查看项目空间耗用的存储大小
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
263 3
|
安全 API 网络安全
API接口安全加固:应对黑客攻击的实战指南
**API安全摘要:** API成为黑客目标,攻击类型包括未授权访问、CSRF、DDoS、数据泄露和注入攻击。防御策略包括使用OAuth 2.0和JWT进行认证授权,防止CSRF攻击,限制请求速率,避免数据泄露,以及实施注入攻击防护。开发者应定期更新安全措施,确保API安全性。示例代码展示了Node.js中JWT认证的实现。
543 0
|
机器学习/深度学习 分布式计算 大数据
MaxCompute产品使用合集之如何查看空间资源、CPU和内存以及存储空间容量
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
395 0
|
存储 编解码 Unix
PyMuPDF 1.24.4 中文文档(十三)(2)
PyMuPDF 1.24.4 中文文档(十三)
528 0
|
数据采集 分布式计算 DataWorks
DataWorks产品使用合集之DataWorks中配置节点上下文输出参数如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
392 1
|
JSON Java API
JSON & GSON - 读取 JSON 文件
JSON & GSON - 读取 JSON 文件
1405 0