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.hqwc.cn/news/229854.html

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

相关文章

基于IDEA+MySQL+Tomcat开发的高校毕业生就业信息管理系统

基于IDEAMySQLTomcat开发的高校毕业生就业信息管理系统 项目介绍&#x1f481;&#x1f3fb; 高校毕业生信息管理系统背景介绍 随着高等教育的发展和信息化技术的普及&#xff0c;高校毕业生信息管理面临着越来越多的挑战。为了解决这些问题&#xff0c;我们开发了高校毕业生信…

校园跑腿的核心功能

校园跑腿是指在校园内提供各种代办和服务的便利服务。 1. 快速送货&#xff1a;校园跑腿可以提供快速的送货服务&#xff0c;包括食品、快递、文件等物品的送达。 2. 打印复印&#xff1a;校园跑腿可以提供打印、复印等文档处理服务&#xff0c;方便学生和教职工处理各种文档…

C语言基础程序设计题

1.个人所得税计算 应纳税款的计算公式如下&#xff1a;收入<&#xff1d;1000元部分税率为0&#xff05;&#xff0c;2000元>&#xff1d;收入>1000元的部分税率为5&#xff05;&#xff0c;3000元>&#xff1d;收入>2000元的部分税率为10&#xff05;&#xf…

通用闪存存储(UFS)市场研究,预计2029年将达到1,930.99百万美元

UFS产品定义及统计范围 UFS &#xff08;Universal Flash Storage&#xff0c;通用闪存存储&#xff09;&#xff0c;UFS是一种高性能接口&#xff0c;设计用于需要最小化功耗的应用&#xff0c;包括智能手机和平板电脑等移动系统以及汽车应用&#xff0c;其高速串行接口和优化…

RocketMQ源码剖析之createUniqID方法

目录 版本信息&#xff1a; 写在前面&#xff1a; 源码剖析&#xff1a; 总计&#xff1a; 版本信息&#xff1a; RocketMQ-5.1.3 源码地址&#xff1a;https://github.com/apache/rocketmq 写在前面&#xff1a; 首先&#xff0c;笔者先吐槽一下RocketMQ的官方&#xff0…

AMIS【部署 01】amis前端低代码框架可视化编辑器amis-editor本地部署流程

amis-editor本地部署流程 1.amis-editor是什么1.1 amis是什么1.2 amis-editor是什么 2.amis-editor本地部署2.1 准备阶段2.2 源码修改2.3 构建项目2.4 nginx配置2.5 启动nginx 3.总结 官网仅贴出了本地运行这个项目的步骤&#xff1a; # 1.安装依赖 npm i # 2.等编译完成后本地…

springboot基础配置及maven运行

目录 1、spring快速开始&#xff1a; 2、通过idea工具打开导入包 3、maven打包 1、springboot快速开始&#xff1a; 环境依赖&#xff1a;jdk17 Spring | Quickstart spring初始化包下载&#xff1a; 点击generate&#xff0c;下载包 2、通过idea工具打开导入包 我之前写了…

多模态大模型总结2(主要2023年)

LLaVA-V1&#xff08;2023/04&#xff09; 论文&#xff1a;Visual Instruction Tuning 网络结构 如下图 所示为 LLaVA-v1 的模型结构&#xff0c;可以看出其简化了很多&#xff0c;但整体来说还是由三个组件构成&#xff1a; Vision Encoder&#xff1a;和 Flamingo 模型的 V…

基于Pix2Struct的文档信息提取【DocVQA】

文档信息提取涉及使用计算机算法从非结构化或半结构化文档&#xff08;例如报告、电子邮件和网页&#xff09;中提取结构化数据&#xff08;例如员工姓名、地址、职务、电话号码等&#xff09;。 提取的信息可用于各种目的&#xff0c;例如分析和分类。 DocVQA&#xff08;文档…

RHCSA---基本命令使用

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 Linux中终端中的很多操作都是通过命令行实现的&#xff0c;最常用的输入命令的方法有以下两种。 (1).打开自带的终端&#xff0c;类似于Windows中的CMD (2).ssh远程连接&#xff0c;关于…

MYSQL存储

注意&#xff1a; 1.如果没有指定的SESSION/GLOBAL&#xff0c;默认是SESSION&#xff0c;会话变量。 2.mysql服务重新启动之后&#xff0c;所设置的全局参数会失效&#xff0c;要想不失效&#xff0c;可以在/etc/my.cnf中配置。 变量 用户定义变量是用户根据需要自己定义变量…

注解Annotation - Java

注解Annotation 一、介绍二、使用三、三个基本的Annotation四、JDK内置的基本注解类型1、Override2、Deprecated3、SuppressWarnings 五、JDK的元注解1、Retention2、Target3、Documented4、Inherited 一、介绍 注解&#xff08;Annotation&#xff09;也被称为元数据&#xf…