利用JavaMail发送HTML模板邮件
作者:虚心若愚求知若渴 发布时间:2023-01-21 02:25:32
标签:JavaMail,HTML,邮件
本文实例为大家分享了用JavaMail发送HTML模板邮件的具体代码,供大家参考,具体内容如下
依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.3</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.1</version>
</dependency>
工具类
package test.email;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Date;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 发送邮件工具类
*/
public class MailUtil {
private final static Logger logger = LoggerFactory.getLogger(MailUtil.class);
/**
* 邮件发送
* @param mailHost 邮件服务地址
* @param fromMail 发件人
* @param fromName 发件人名
* @param fromMailPwd 发件人密码
* @param toMails 收件人,多个用英文逗号分隔
* @param mailTitle 邮件标题
* @param mailContent 邮件内容
* @throws Exception
*/
public static void sendMail(String mailHost, String fromMail, String fromName, String fromMailPwd,
String toMails, String mailTitle, String mailContent) throws Exception {
String[] toMailArr = null;
if (toMails != null && !toMails.equals("")) {
toMailArr = toMails.split(",");
} else {
throw new Exception("邮件发送人不能为空");
}
// 邮件属性信息
Properties props = new Properties();
props.put("mail.host", mailHost);
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props); // 根据属性新建一个邮件会话
//session.setDebug(true); // 是否打印调试信息
toMailArr = toMails.split(",");
for (String to : toMailArr) {
MimeMessage message = new MimeMessage(session); // 由邮件会话新建一个消息对象
message.setFrom(new InternetAddress(fromMail));// 设置发件人的地址
message.setRecipient(Message.RecipientType.TO, new InternetAddress(to, fromName));// 设置收件人,并设置其接收类型为TO
message.setSubject(mailTitle);// 设置标题
message.setContent(mailContent, "text/html;charset=UTF-8"); // 设置邮件内容类型为html
message.setSentDate(new Date());// 设置发信时间
message.saveChanges();// 存储邮件信息
// 发送邮件
Transport transport = session.getTransport();
transport.connect(fromMail, fromMailPwd);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
}
/**
* 邮件发送(群发)
* @param mailHost 邮件服务地址
* @param fromMail 发件人
* @param fromName 发件人名
* @param fromMailPwd 发件人密码
* @param toMails 收件人,多个用英文逗号分隔
* @param mailTitle 邮件标题
* @param mailContent 邮件内容
* @throws Exception
*/
public static void sendGroupMail(String mailHost, String fromMail, String fromName, String fromMailPwd,
String toMails, String mailTitle, String mailContent) throws Exception {
String[] toMailArr = null;
if (toMails != null && !toMails.equals("")) {
toMailArr = toMails.split(",");
} else {
throw new Exception("邮件发送人不能为空");
}
// 邮件属性信息
Properties props = new Properties();
props.put("mail.host", mailHost);
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props); // 根据属性新建一个邮件会话
//session.setDebug(true); // 是否打印调试信息
MimeMessage message = new MimeMessage(session); // 由邮件会话新建一个消息对象
message.setFrom(new InternetAddress(fromMail)); // 设置发件人的地址
InternetAddress[] sendTo = new InternetAddress[toMailArr.length];
for (int i = 0; i < toMailArr.length; i++) {
sendTo[i] = new InternetAddress(toMailArr[i], fromName);
}
message.setRecipients(Message.RecipientType.TO, sendTo); // 设置收件人,并设置其接收类型为TO
message.setSubject(mailTitle); // 设置标题
message.setContent(mailContent, "text/html;charset=UTF-8"); // 设置邮件内容类型为html
message.setSentDate(new Date()); // 设置发信时间
message.saveChanges(); // 存储邮件信息
// 发送邮件
Transport transport = session.getTransport();
transport.connect(fromMail, fromMailPwd);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
/**
* 读取html文件为String
* @param htmlFileName
* @return
* @throws Exception
*/
public static String readHtmlToString(String htmlFileName) throws Exception{
InputStream is = null;
Reader reader = null;
try {
is = MailUtil.class.getClassLoader().getResourceAsStream(htmlFileName);
if (is == null) {
throw new Exception("未找到模板文件");
}
reader = new InputStreamReader(is, "UTF-8");
StringBuilder sb = new StringBuilder();
int bufferSize = 1024;
char[] buffer = new char[bufferSize];
int length = 0;
while ((length = reader.read(buffer, 0, bufferSize)) != -1){
sb.append(buffer, 0, length);
}
return sb.toString();
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
logger.error("关闭io流异常", e);
}
try {
if (reader != null) {
reader.close();
}
} catch ( IOException e) {
logger.error("关闭io流异常", e);
}
}
}
}
HTML模板
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>java 邮件发送</title>
</head>
<body>
<h1 id="title"></h1>
<div id="content"></div>
</body>
</html>
测试
package test.email;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class SendHtmlTemplateMail {
public static void main(String[] args) throws Exception {
// 读取html模板
String html = MailUtil.readHtmlToString("mailTemplate.html");
// 写入模板内容
Document doc = Jsoup.parse(html);
doc.getElementById("title").html("java 邮件发送测试");
doc.getElementById("content").html("么么哒");
String result = doc.toString();
String mailHost = "smtp.qq.com";
String fromMail = "";
String fromName = "小灰";
String fromMailPwd = "";
String toMails = "";
String mailTitle = "hello javamail";
String mailContent = result;
// 发送邮件
MailUtil.sendMail(mailHost, fromMail, fromName, fromMailPwd, toMails, mailTitle, mailContent);
}
}
来源:https://blog.csdn.net/weixin_39806100/article/details/100203319


猜你喜欢
- Data Annotations是在Asp.Net中用于表单验证的,它通过Attribute直接标记字段的有效性,简单且直观。在非Asp.N
- 前言之所以会有这篇文章,是因为公司的开发环境比较老,寻找一些jar包的时候总是会纠结对应的编译版本,感觉很麻烦,所以写了一个工具类用于读取c
- 上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划简要介绍了Android系统进程间通
- using System;using System.Collections.Generic;using System.ComponentMo
- Java画图 给图片底部添加文字标题需求给图片底部添加文字编号import java.awt.Color;import java.awt.F
- 1.以ApplocationContext上下文单例模式装配bean为例,深入探讨bean的生命周期:(1).生命周期图:(2).具体事例:
- 为此Android在appcompat-v7库中提供了一个NotificationCompat类来处理新老版本的兼容问题,我们在编写通知功能
- 这篇文章需要一定Vue和SpringBoot的知识,分为两个项目,一个是前端Vue项目,一个是后端SpringBoot项目。后端项目搭建我使
- IDEA SpringBoot项目配置热更新的步骤1.在pom.xml中添加依赖:<dependency><groupId
- android读取assets文件下的内容,一般都是使用getAsset.open()方法,并将文件的路径作为参数传入,而当我们解析一个目录
- 01.点明观点C#中,非托管资源使用之后必须释放,而using()是使用非托管资源的最佳方式,可以确保资源在代码块结束之后被正确释放,并且代
- 1.传递引用在一个方法中将一个对象的引用传递给另外一个方法,引用指向的对象是同一个public class Person {int age;
- JSONObject的使用 一、 JSON对象的使用:String content = "{'username&
- 本文实例讲述了C#双缓冲实现方法。分享给大家供大家参考,具体如下:// 该调用是 Windows.Forms &nb
- springboot环境切换失效概述最近在使用-Dspring.profiles.active=te 来切换spring-boot的环境时,
- 多点触摸技术在实际开发过程中,用的最多的就是放大缩小功能。比如有一些图片浏览器,就可以用多个手指在屏幕上操作,对图片进行放大或者缩小。再比如
- Spring 封装了 RedisTemplate 来操作 Redis,它支持所有的 Redis 原生的 API。在 Re
- Java流程控制用户交互Scannerjava.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入基本语
- 在以往的 Tomcat 项目中,一直习惯用 Ant 打包,使用 build.xml 配置,通过 ant -buildfile 的方式在机器上
- Maven工程分模块开发完成 父工程配置了 tomcat7插件,运行 run命令执行run指令时失败,报错信息如下:D:\java\JDK8