java发送邮件javamail, freemarker读取html模板内容
https://www.cnblogs.com/xdp-gacl/p/4216311.html
一、RFC882文档简单说明
RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。
邮件头包含的内容有:
- from字段 --用于指明发件人
- to字段 --用于指明收件人
- subject字段 --用于说明邮件主题
- cc字段 -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁
- bcc字段 -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁
邮件体指的就是邮件的具体内容。
二、MIME协议简单介绍
在我们的实际开发当中,一封邮件既可能包含图片,又可能包含有附件,在这样的情况下,RFC882文档规定的邮件格式就无法满足要求了。
MIME协议是对RFC822文档的升级和补充,它描述了如何生产一封复杂的邮件。通常我们把MIME协议描述的邮件称之为MIME邮件。MIME协议描述的数据称之为MIME消息。
对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。
三、使用JavaMail创建邮件和发送邮件
JavaMail创建的邮件是基于MIME协议的。因此可以使用JavaMail创建出包含图片,包含附件的复杂邮件。
3.1、JavaMail API的简单介绍
3.2、创建邮件发送测试项目
3.3、发送一封只包含文本的简单邮件
- package me.gacl.main;
- import java.util.Properties;
- import javax.mail.Message;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeMessage;
- /**
- * @ClassName: Sendmail
- * @Description: 发送Email
- * @author: 孤傲苍狼
- * @date: 2015-1-12 下午9:42:56
- *
- */
- public class Sendmail {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- Properties prop = new Properties();
- prop.setProperty("mail.host", "smtp.sohu.com");
- prop.setProperty("mail.transport.protocol", "smtp");
- prop.setProperty("mail.smtp.auth", "true");
- //使用JavaMail发送邮件的5个步骤
- //1、创建session
- Session session = Session.getInstance(prop);
- //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
- session.setDebug(true);
- //2、通过session得到transport对象
- Transport ts = session.getTransport();
- //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
- ts.connect("smtp.sohu.com", "gacl", "邮箱密码");
- //4、创建邮件
- Message message = createSimpleMail(session);
- //5、发送邮件
- ts.sendMessage(message, message.getAllRecipients());
- ts.close();
- }
- /**
- * @Method: createSimpleMail
- * @Description: 创建一封只包含文本的邮件
- * @Anthor:孤傲苍狼
- *
- * @param session
- * @return
- * @throws Exception
- */
- public static MimeMessage createSimpleMail(Session session)
- throws Exception {
- //创建邮件对象
- MimeMessage message = new MimeMessage(session);
- //指明邮件的发件人
- message.setFrom(new InternetAddress("gacl@sohu.com"));
- //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
- message.setRecipient(Message.RecipientType.TO, new InternetAddress("gacl@sohu.com"));
- //邮件的标题
- message.setSubject("只包含文本的简单邮件");
- //邮件的文本内容
- message.setContent("你好啊!", "text/html;charset=UTF-8");
- //返回创建好的邮件对象
- return message;
- }
- }
3.4、发送包含内嵌图片的邮件
- package me.gacl.main;
- import java.io.FileOutputStream;
- import java.util.Properties;
- import javax.activation.DataHandler;
- import javax.activation.FileDataSource;
- import javax.mail.Message;
- 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;
- /**
- * @ClassName: Sendmail
- * @Description: 发送Email
- * @author: 孤傲苍狼
- * @date: 2015-1-12 下午9:42:56
- *
- */
- public class Sendmail {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- Properties prop = new Properties();
- prop.setProperty("mail.host", "smtp.sohu.com");
- prop.setProperty("mail.transport.protocol", "smtp");
- prop.setProperty("mail.smtp.auth", "true");
- //使用JavaMail发送邮件的5个步骤
- //1、创建session
- Session session = Session.getInstance(prop);
- //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
- session.setDebug(true);
- //2、通过session得到transport对象
- Transport ts = session.getTransport();
- //3、连上邮件服务器,需要发件人提供邮箱的用户名和密码进行验证
- ts.connect("smtp.sohu.com", "gacl", "邮箱密码");
- //4、创建邮件
- Message message = createImageMail(session);
- //5、发送邮件
- ts.sendMessage(message, message.getAllRecipients());
- ts.close();
- }
- /**
- * @Method: createImageMail
- * @Description: 生成一封邮件正文带图片的邮件
- * @Anthor:孤傲苍狼
- *
- * @param session
- * @return
- * @throws Exception
- */
- public static MimeMessage createImageMail(Session session) throws Exception {
- //创建邮件
- MimeMessage message = new MimeMessage(session);
- // 设置邮件的基本信息
- //发件人
- message.setFrom(new InternetAddress("gacl@sohu.com"));
- //收件人
- message.setRecipient(Message.RecipientType.TO, new InternetAddress("xdp_gacl@sina.cn"));
- //邮件标题
- message.setSubject("带图片的邮件");
- // 准备邮件数据
- // 准备邮件正文数据
- MimeBodyPart text = new MimeBodyPart();
- text.setContent("这是一封邮件正文带图片<img src='cid:xxx.jpg'>的邮件", "text/html;charset=UTF-8");
- // 准备图片数据
- MimeBodyPart image = new MimeBodyPart();
- DataHandler dh = new DataHandler(new FileDataSource("src\\1.jpg"));
- image.setDataHandler(dh);
- image.setContentID("xxx.jpg");
- // 描述数据关系
- MimeMultipart mm = new MimeMultipart();
- mm.addBodyPart(text);
- mm.addBodyPart(image);
- mm.setSubType("related");
- message.setContent(mm);
- message.saveChanges();
- //将创建好的邮件写入到E盘以文件的形式进行保存
- message.writeTo(new FileOutputStream("E:\\ImageMail.eml"));
- //返回创建好的邮件
- return message;
- }
- }
3.5、发送包含附件的邮件
- package me.gacl.main;
- import java.io.FileOutputStream;
- import java.util.Properties;
- import javax.activation.DataHandler;
- import javax.activation.FileDataSource;
- import javax.mail.Message;
- 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;
- /**
- * @ClassName: Sendmail
- * @Description: 发送Email
- * @author: 孤傲苍狼
- * @date: 2015-1-12 下午9:42:56
- *
- */
- public class Sendmail {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- Properties prop = new Properties();
- prop.setProperty("mail.host", "smtp.sohu.com");
- prop.setProperty("mail.transport.protocol", "smtp");
- prop.setProperty("mail.smtp.auth", "true");
- //使用JavaMail发送邮件的5个步骤
- //1、创建session
- Session session = Session.getInstance(prop);
- //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
- session.setDebug(true);
- //2、通过session得到transport对象
- Transport ts = session.getTransport();
- //3、连上邮件服务器
- ts.connect("smtp.sohu.com", "gacl", "邮箱密码");
- //4、创建邮件
- Message message = createAttachMail(session);
- //5、发送邮件
- ts.sendMessage(message, message.getAllRecipients());
- ts.close();
- }
- /**
- * @Method: createAttachMail
- * @Description: 创建一封带附件的邮件
- * @Anthor:孤傲苍狼
- *
- * @param session
- * @return
- * @throws Exception
- */
- public static MimeMessage createAttachMail(Session session) throws Exception{
- MimeMessage message = new MimeMessage(session);
- //设置邮件的基本信息
- //发件人
- message.setFrom(new InternetAddress("gacl@sohu.com"));
- //收件人
- message.setRecipient(Message.RecipientType.TO, new InternetAddress("xdp_gacl@sina.cn"));
- //邮件标题
- message.setSubject("JavaMail邮件发送测试");
- //创建邮件正文,为了避免邮件正文中文乱码问题,需要使用charset=UTF-8指明字符编码
- MimeBodyPart text = new MimeBodyPart();
- text.setContent("使用JavaMail创建的带附件的邮件", "text/html;charset=UTF-8");
- //创建邮件附件
- MimeBodyPart attach = new MimeBodyPart();
- DataHandler dh = new DataHandler(new FileDataSource("src\\2.jpg"));
- attach.setDataHandler(dh);
- attach.setFileName(dh.getName()); //
- //创建容器描述数据关系
- MimeMultipart mp = new MimeMultipart();
- mp.addBodyPart(text);
- mp.addBodyPart(attach);
- mp.setSubType("mixed");
- message.setContent(mp);
- message.saveChanges();
- //将创建的Email写入到E盘存储
- message.writeTo(new FileOutputStream("E:\\attachMail.eml"));
- //返回生成的邮件
- return message;
- }
- }
3.6、发送包含内嵌图片和附件的复杂邮件
- package me.gacl.main;
- import java.io.FileOutputStream;
- import java.util.Properties;
- import javax.activation.DataHandler;
- import javax.activation.FileDataSource;
- import javax.mail.Message;
- 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;
- /**
- * @ClassName: Sendmail
- * @Description: 发送Email
- * @author: 孤傲苍狼
- * @date: 2015-1-12 下午9:42:56
- *
- */
- public class Sendmail {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- Properties prop = new Properties();
- prop.setProperty("mail.host", "smtp.sohu.com");
- prop.setProperty("mail.transport.protocol", "smtp");
- prop.setProperty("mail.smtp.auth", "true");
- //使用JavaMail发送邮件的5个步骤
- //1、创建session
- Session session = Session.getInstance(prop);
- //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
- session.setDebug(true);
- //2、通过session得到transport对象
- Transport ts = session.getTransport();
- //3、连上邮件服务器
- ts.connect("smtp.sohu.com", "gacl", "邮箱密码");
- //4、创建邮件
- Message message = createMixedMail(session);
- //5、发送邮件
- ts.sendMessage(message, message.getAllRecipients());
- ts.close();
- }
- /**
- * @Method: createMixedMail
- * @Description: 生成一封带附件和带图片的邮件
- * @Anthor:孤傲苍狼
- *
- * @param session
- * @return
- * @throws Exception
- */
- public static MimeMessage createMixedMail(Session session) throws Exception {
- //创建邮件
- MimeMessage message = new MimeMessage(session);
- //设置邮件的基本信息
- message.setFrom(new InternetAddress("gacl@sohu.com"));
- message.setRecipient(Message.RecipientType.TO, new InternetAddress("xdp_gacl@sina.cn"));
- message.setSubject("带附件和带图片的的邮件");
- //正文
- MimeBodyPart text = new MimeBodyPart();
- text.setContent("xxx这是女的xxxx<br/><img src='cid:aaa.jpg'>","text/html;charset=UTF-8");
- //图片
- MimeBodyPart image = new MimeBodyPart();
- image.setDataHandler(new DataHandler(new FileDataSource("src\\3.jpg")));
- image.setContentID("aaa.jpg");
- //附件1
- MimeBodyPart attach = new MimeBodyPart();
- DataHandler dh = new DataHandler(new FileDataSource("src\\4.zip"));
- attach.setDataHandler(dh);
- attach.setFileName(dh.getName());
- //附件2
- MimeBodyPart attach2 = new MimeBodyPart();
- DataHandler dh2 = new DataHandler(new FileDataSource("src\\波子.zip"));
- attach2.setDataHandler(dh2);
- attach2.setFileName(MimeUtility.encodeText(dh2.getName()));
- //描述关系:正文和图片
- MimeMultipart mp1 = new MimeMultipart();
- mp1.addBodyPart(text);
- mp1.addBodyPart(image);
- mp1.setSubType("related");
- //描述关系:正文和附件
- MimeMultipart mp2 = new MimeMultipart();
- mp2.addBodyPart(attach);
- mp2.addBodyPart(attach2);
- //代表正文的bodypart
- MimeBodyPart content = new MimeBodyPart();
- content.setContent(mp1);
- mp2.addBodyPart(content);
- mp2.setSubType("mixed");
- message.setContent(mp2);
- message.saveChanges();
- message.writeTo(new FileOutputStream("E:\\MixedMail.eml"));
- //返回创建好的的邮件
- return message;
- }
- }
以上就是使用JavaMail的API创建邮件和发送邮件的全部内容。
如果想发送带html模板的内容,请结合Freemarker来使用。
https://www.cnblogs.com/achengmu/p/10790789.html
- String content = htmlToPdfFreeMarkerServer.freeMarkerRender(null, "pdfmodel/flight_delay_content.html");
- Properties prop = new Properties();
- prop.setProperty("mail.host", "mail.xxxx.com.cn");
- prop.setProperty("mail.transport.protocol", "smtp");
- prop.setProperty("mail.smtp.auth", "true");
- //使用JavaMail发送邮件的5个步骤
- //1、创建session
- Session session = Session.getInstance(prop);
- //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
- session.setDebug(true);
- //2、通过session得到transport对象
- Transport ts = session.getTransport();
- //3、连上邮件服务器
- ts.connect("mail.xxxx.com.cn", "tvweb@xxxx.com.cn", "xxxxx");
- //4、创建邮件
- Message message = null;
- String subject = "xxxxx证明";
- //读取模板内容, null表示不需要替换任何变量
- String content = htmlToPdfFreeMarkerServer.freeMarkerRender(null, "pdfmodel/flight_delay_content.html");
- message = SendMail.createSimpleMail(
- "tvweb@tibetairlines.com.cn",
- toMail,
- subject,
- content,
- session);
java发送邮件javamail, freemarker读取html模板内容的更多相关文章
- Java代码一行一行读取txt的内容
public static void main(String[] args) { // 文件夹路径 String path = "E:\\eclipse work\\ImageUtil\\s ...
- java 实现poi方式读取word文件内容
1.下载poi的jar包 下载地址:https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz ...
- java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...
- poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算
/** * 版权所有(C) 2016 * @author www.xiongge.club * @date 2016-12-7 上午10:03:29 */ package xlsx; /** * @C ...
- poi读取Excel模板并修改模板内容与动态的增加行
有时候我们可能遇到相当复杂的excel,比如表头的合并等操作,一种简单的方式就是直接代码合并(浪费时间),另一种就是写好模板,动态的向模板中增加行和修改指定单元格数据. 1.一个简单的根据模板shee ...
- Java之利用Freemarker模板引擎实现代码生成器,提高效率
https://blog.csdn.net/huangwenyi1010/article/details/71249258 java模板引擎freemarker代码生成器 更多 个人分类: 一步一步 ...
- java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- 五种方式让你在java中读取properties文件内容不再是难题
一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...
- java读取txt文件内容
package read; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public ...
随机推荐
- eclipse下载SpringBoot插件及创建SpringBoot项目
一.eclipse在线下载SpringBoot插件 1.help->eclipse marketplace->popular-选择spring tool suite(STS)进行下载 ...
- 函数的学习1——定义函数&传递实参——参考Python编程从入门到实践
定义函数 def greet_user(): print("Hello") greet_user() # PEP8 函数和类的定义后空两行 1. 向函数传递参数 def greet ...
- 12 IO流(九)——装饰流 BufferedInputStream/OutputStream
我们按功能可以将IO流分为节点流与处理流 节点流:可以直接从数据源或目的地读写数据 处理流(装饰流):不直接连接到数据源或目的地,是其他流(必须包含节点流)进行封装.目的主要是简化操作和提高性能. B ...
- Java 总结篇2
第02章:数据类型和运算符 一.概述: 1.数据类型:int.float.char.boolean 2.运算符:算术运算符.赋值运算符.关系运算符.逻辑运算符.位运算符(了解即可).条件运算符 3.基 ...
- Mybatis @Many注解一对多关联映射
@Many注解:fetchType属性用于配置是否延迟加载
- (四)pdf的构成之文件体(树图)
pdf的文件体类似于一个大树 有个根对象(catalog),该对象中保存着PDF的很多基本信息,并通过间接引用,辐射到所有的间接对象. (下图是大概的树形状)
- Spring Boot@Component注解下的类无法@Autowired的问题
title: Spring Boot@Component注解下的类无法@Autowired的问题 date: 2019-06-26 08:30:03 categories: Spring Boot t ...
- 【转载】终于有人把“TCC分布式事务”的实现原理讲明白了
之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下.很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用. 所以这篇文章,就用大白话+手工绘图,并结合一 ...
- Windows MySql增量备份、完整备份采坑之路
1.前言 这周公司交给我一个任务,负责项目Mysql数据库的备份,因为项目上线后数据是一个大问题,出了什么问题数据才是最大的问题,备份这时候就显得尤为重要, 公司项目的思路是:在项目系统设置内可以勾选 ...
- python之(TensorFlow)深度学习
一.深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artifi ...