springboot实现邮箱发送功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 邮箱效果图
  • 一、pom配置
  • 二、页面编写
  • 三、配置yml
  • 四、邮件工具类
  • 五、测试发送


邮箱效果图

在这里插入图片描述

1.可以利用在出现问题进行邮箱提醒
2.编写html 用于在邮箱中展示的样式


提示:以下是本篇文章正文内容,下面案例可供参考

一、pom配置

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--邮件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.3</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version><scope>compile</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency>

二、页面编写

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>系统通知邮件模板-纯文本型</title>
</head><body>
<div style="font-size: 14px;"><br><br><br><br><div style="width: 600px; margin: 0 auto; background-color: #00838a; border-radius: 3px;"><div style="padding: 0 15px; padding-bottom: 20px;"><div style="height: 72px;"><div><a href="https://www.lplovemm.love/" target="_blank" rel="noopener"style="text-decoration: none;"><img src="http://mall.bydauto.com.cn/pc/_nuxt/img/logo.97a8e60.svg" style="height: 72px;"alt="BYD" title="BYD"></a></div></div><div style="background: #fff; padding: 20px 15px; border-radius: 3px;"><div><span style="font-size: 16px; font-weight: bold;">待办通知:</span><div style="line-height: 24px; margin-top: 10px;"><div>您有一条新的“<span style="font-weight: bold;">订单询价</span>待办,编号为“<span style="font-weight: bold;" id="ip"></span>”,收到信息后请尽快<a style="color: #006eff;font-weight: bold;" href="https://mall.bydauto.com.cn/"target="_blank" rel="noopener">登录MALL系统</a>处理!</div></div></div><div style="margin-top: 30px;"><div><spanstyle="font-size: 15px; font-weight: bold; position: relative; top: -4px;">流程信息</span></div><tablestyle="width: 400px; border-spacing: 0px; border-collapse: collapse; border: none; margin-top: 20px;"><tbody><tr style="height: 45px;"><tdstyle="width: 150px; height: 40px; background: #F6F6F6;border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">上一节点</td><tdstyle="width: 250px;height: 40px; border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">订单咨询</td></tr><tr style="height: 45px;"><tdstyle="width: 150px;height: 40px; background: #F6F6F6;border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">处理人</td><tdstyle="width: 250px;height: 40px; border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">张先生</td></tr><tr style="height: 45px;"><tdstyle="width: 150px; height: 40px; background: #F6F6F6;border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">当前节点</td><tdstyle="width: 250px;height: 40px; border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;"><a style="color: #006eff;" href="https://mall.bydauto.com.cn/" target="_blank"rel="noopener">订单询价</a></td></tr></tbody></table></div><div style="margin-top: 60px;margin-bottom: 10px;"><spanstyle="font-size: 13px; font-weight: bold; color: #666;">温馨提醒</span><div style="line-height: 24px; margin-top: 10px;"><div style="font-size: 13px; color: #666;">使用过程中如有任何问题,请联系LIMS系统管理员。</div></div></div></div></div></div><divstyle="width: 600px; margin: 0 auto;  margin-top: 50px; font-size: 12px; -webkit-font-smoothing: subpixel-antialiased; text-size-adjust: 100%;"><pstyle="text-align: center; line-height: 20.4px; text-size-adjust: 100%; font-family: 'Microsoft YaHei'!important; padding: 0px !important; margin: 0px !important; color: #7e8890 !important;"><span class="appleLinks">Copyright © 2023-2024 北京XXXX科技股份有限公司. 保留所有权利。</span></p><pstyle="text-align: center;line-height: 20.4px; text-size-adjust: 100%; font-family: 'Microsoft YaHei'!important; padding: 0px !important; margin: 0px; color: #7e8890 !important; margin-top: 10px;"><span class="appleLinks">邮件由系统自动发送,请勿直接回复本邮件!</span></p></div>
</div>
</body></html>

三、配置yml

  #配置日志logging:level:root: infoapplication:name: spring-boot-emailmvc.async.request-timeout: 20000#配置邮箱mail:default-encoding: UTF-8host: smtp.163.compassword: **********port: 465username: **********@163.comproperties:mail:smtp:auth: truesocketFactory:class: javax.net.ssl.SSLSocketFactorystarttls:enable: true

四、邮件工具类

package com.information.utils;import java.io.*;
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;
import org.springframework.core.io.FileSystemResource;/*** 发送邮件工具类*/
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,fromName));message.setRecipient(Message.RecipientType.TO, new InternetAddress(to, fromName));// 设置收件人,并设置其接收类型为TOmessage.setSubject(mailTitle);// 设置标题message.setContent(mailContent, "text/html;charset=UTF-8"); // 设置邮件内容类型为htmlmessage.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);}}}}

五、测试发送

    @Autowiredprivate JavaMailSender mailSender;/*** 发送者邮箱*/@Value("${spring.mail.username}")public String MAIL_USERNAME;/*** 发送者host*/@Value("${spring.mail.host}")public String MAIL_HOST;/*** 发送者秘钥*/@Value("${spring.mail.password}")public String PASSWORD;@RequestMapping("/ip")@ResponseBodypublic String bc(HttpServletRequest request){try {List<String> list = new LinkedList<>();Enumeration enumeration = NetworkInterface.getNetworkInterfaces();while (enumeration.hasMoreElements()) {NetworkInterface network = (NetworkInterface) enumeration.nextElement();if (network.isVirtual() || !network.isUp()) {continue;} else {Enumeration addresses = network.getInetAddresses();while (addresses.hasMoreElements()) {InetAddress address = (InetAddress) addresses.nextElement();if (address != null && (address instanceof Inet4Address || address instanceof Inet6Address)) {list.add(address.getHostAddress());}}}}//获取id地址String ip= InetAddress.getLocalHost().getHostAddress();// 创建 HttpClient 实例CloseableHttpClient httpClient = HttpClientBuilder.create().build();//根据ip地址和百度ip普通定位的ak,去获取具体位置String url = "https://api.map.baidu.com/location/ip?ip="+ip+"&coor=bd09ll&ak=***********";// 创建 HttpGet 请求HttpGet httpGet = new HttpGet(url);HttpResponse response = httpClient.execute(httpGet);HttpEntity entity = response.getEntity();// 转换为字符串String json = EntityUtils.toString(entity);Map map = (Map) JSONObject.parse(json); Map content = (Map) map.get("content");Map point = (Map) content.get("point");JSONObject jsonObject = JSONObject.parseObject(point.toString());String x = jsonObject.getString("x");String y = jsonObject.getString("y");// 读取html模板String html = MailUtil.readHtmlToString("mailTemplate.html");// 将拿到的x和y的经纬度写入模板内容Document doc = Jsoup.parse(html);doc.getElementById("ip").html(ip);doc.getElementById("x").html(x);doc.getElementById("y").html(y);String result = doc.toString();String fromName = "小扎仙森";String toMails = "1046406274@qq.com";String mailTitle = "hello java mail";String mailContent = result;/*** 邮件发送* @param mailHost 邮件服务地址* @param fromMail 发件人* @param fromName 发件人名* @param fromMailPwd 发件人密码* @param toMails 收件人,多个用英文逗号分隔* @param mailTitle 邮件标题* @param mailContent 邮件内容* @throws Exception*/// 发送邮件MailUtil.sendMail(MAIL_HOST, MAIL_USERNAME,fromName, PASSWORD, toMails, mailTitle, mailContent);return "邮箱发送成功";} catch (IOException e) {e.printStackTrace();} catch (Exception e) {throw new RuntimeException(e);}return "发送失败";}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/184781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-04-队列

1-队列的结构和特点 生活中我们排队买票&#xff0c;先来的先买&#xff0c;后来的人只能站末尾&#xff0c;不允许插队。先进者先出&#xff0c;这就是典型的"队列"。队列跟栈非常相似&#xff0c;支持的操作也很有限&#xff0c;最基本的操作也是两个&#xff1a;入…

记录一次前后端传参方式不一致异常

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 报错以及Bug ✨特色专栏&#xff1a; …

mac截图Snagit 中文介绍

1.超越普通的屏幕截图 TechSmith Snagit 是唯一具有内置高级图像编辑和屏幕录制功能的屏幕捕获软件。因此&#xff0c;您可以在一个程序中轻松创建高质量的图像和视频。 2.最后&#xff0c;屏幕捕获软件可以完成您所做的一切 快速解释一个过程如果您正在努力清楚地沟通&…

网络聊天室项目

服务器端 #include <myhd.h>//传输结构体 struct cli {char type; // L/C/Qchar name[20];char text[128]; }; int main(int argc, const char *argv[]) {if(argc!3){printf("请输入ip地址和端口号\n");return -1;}//1、创建用于通信的套接字文件描述符in…

java第二十章总结多线程

20.2创建线程 20.2.1继承Thread类 Thread类是Java.lang包中的一个类&#xff0c;从这个类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建议Thread实例。 public class ThreadTest extedns Thread{} run方法格式&#xff1a; public void run(){} 20.1让线程…

Attacking Fake News Detectors via Manipulating News Social Engagement(2023 WWW)

Attacking Fake News Detectors via Manipulating News Social Engagement----《通过操纵新闻社交互动来攻击假新闻检测器》 摘要 在年轻一代中&#xff0c;获取新闻的主要来源之一是社交媒体。随着新闻在各种社交媒体平台上日益流行&#xff0c;虚假信息和毫无根据的言论的传…

网络安全应该怎么学?(0基础小白)

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…

钢贸行业ERP系统:实现全面管理与持续增长的利器

去年在上海举办的数字化钢贸高峰论坛中提出钢贸业亟需数字化转型&#xff0c;因为在大力发展数字经济的时代背景下&#xff0c;行业进行数字化转型已经成为一种必然趋势。在今年以前&#xff0c;一些钢贸商一直沿用着以前非常粗放的管理手段&#xff0c;比如手写账本。而如果使…

vr智慧党建展厅超强参与感增强党员群众认同感、归属感

党建教育与VR虚拟现实技术的结合&#xff0c;是顺应现代信息化发展趋势的要求&#xff0c;不仅打破了传统党建教育的束缚&#xff0c;还丰富了党建宣传教育的渠道&#xff0c;党建教育VR云课堂平台是基于深圳华锐视点自主研发的VR云课堂平台中去体验各种VR党建教育软件或者视频…

Go语言实现大模型分词器tokenizer

文章目录 前言核心结构体定义构造函数文本初始处理组词构建词组索引训练数据编码解码打印状态信息运行效果总结 前言 大模型的tokenizer用于将原始文本输入转化为模型可处理的输入形式。tokenizer将文本分割成单词、子词或字符&#xff0c;并将其编码为数字表示。大模型的toke…

【广州华锐视点】VR模拟法庭审判实训,零距离感受庭审全过程

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为人们提供了全新的体验方式。在法律领域&#xff0c;VR技术的应用也日益受到关注。近年来&#xff0c;越来越多的法学院和培训机构开始尝试将VR技术引入模拟法庭实践…

电商数据采集中如何采集1688平台商品详情SKU数据

一、背景介绍 1688.com是阿里旗下国内最大的B2B批发采购平台&#xff0c;1688分销客是依托此平台的官方营销平台&#xff0c;通过此平台API接口的接入推广平台商家的商品&#xff0c;按照商品成交金额的一定比例获得佣金。可以调用1688平台上的商品详情&#xff0c;SKU数据&…

社区内涝积水监测系统作用,改善社区积水

随着社区化进程的加速&#xff0c;社区基础设施的重要性日益凸显。在这个背景下&#xff0c;社区生命线和内涝积水监测系统成为了关注的焦点。它们在维护社区安全&#xff0c;特别是在应对暴雨等极端天气条件下&#xff0c;发挥着至关重要的作用。 WITBEE万宾时刻关注社区内涝积…

PCL 最小二乘拟合圆柱(C++详细过程版)

目录 一、算法原理1、算法简介2、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法简介 圆柱拟合步骤主要包括两步: 一是确定柱面模型参数初始值…

关于大模型在文本分类上的尝试

文章目录 前言所做的尝试总结前言 总共25个类别,在BERT上的效果是48%,数据存在不平衡的情况,训练数据分布如下: 训练数据不多,4000左右 所做的尝试 1、基于 Qwen-14b-base 做Lora SFT,Loss忘记记录 准确率在68%左右 Lora配置 class LoraArguments:lora_r: int = 64…

【JavaEE初阶】volatile 关键字、wait 和 notify

目录 一、volatile 关键字 1、volatile 能保证内存可见性 2、volatile 不保证原子性 二、wait 和 notify 1、wait()方法 2、notify()方法 3、notifyAll()方法 4、wait 和 sleep 的对比 一、volatile 关键字 1、volatile 能保证内存可见性 我们前面的线程安全文章中&…

Docker安装可视化工具Portainer

目录 Portainer简介 Portainer安装 Portainer简介 Portainer是一款开源的容器管理平台&#xff0c;支持多种容器技术&#xff0c;如Docker、Kubernetes和Swarm等。它提供了一个易于使用的Web UI界面&#xff0c;可用于管理和监控容器和集群。Portainer旨在使容器管理更加简单…

前端三大MV*模式:MVC、mvvm、mvp模式介绍

MVC&#xff08;同步通信为主&#xff09;&#xff1a;Model、View、Controller MVP(异步通信为主)&#xff1a;Model、View、Presenter MVVM(异步通信为主)&#xff1a;Model、View、ViewModel mvc模式介绍 MVC&#xff08;Model–View–Controller&#xff09;模式是软件…

Elk:filebeat 日志收集工具和logstash

Elk:filebeat 日志收集工具和logstash Filebeat是一个轻量级的日志手机工具,所使用的系统资源比logstash部署和启动时使用的资源要小得多 Filebeat可以在非java环境使用&#xff0c;他可以代理logstash在非java环境上收集日志 缺点 Filebeat无法实现数据的过滤,一般是结合l…

Direct local .aar file dependencies are not supported when building an AAR.

Direct local .aar file dependencies are not supported when building an AAR. 问题描述&#xff1a;打debug包没有问题&#xff0c;但是打release包(无论是apk还是aar包)时会报错“Direct local .aar file dependencies are not supported when building an AAR.” 原因&a…