springboot邮件发送

一、讲一下thymeleaf的简单使用

1.在根路径下写一个  resources/templates/good.html  文件

2. 在代码实现

记得 不要加 @RequestBody这个注解,因为它会把string当作普通 的字符串,而不是去渲染对应的good.html视图

3.看效果

关于图片的显示,我后面写的有,thymeleaf 可以使用 @{/} 来对图片进行匹配

4.拓展一下,在 代码中自定义文字,并在html渲染

这是要用到 Model , model.addAtrributes() 来对其中 th:txt 进行渲染

对应的good.html

对应的页面

二、在邮件发送时,不使用Model,而是用另一种方式

在往 邮件 中添加 图片,要用到 cid

我先举个示例代码,看不懂也没关系,摸索一会。。。。。。

下面这段代码,实现了发送 验证码,以及往邮件中添加图片。

@GetMapping("sendEmail/{to}")@ResponseBodypublic String sendEmail(@PathVariable  String to ,@RequestParam("username") String username){Context ctx=new Context();Map<String,Object> variables=new HashMap<>();variables.put("username",username);int codeLen=6;String code=getCode(codeLen);variables.put("code",code);ctx.setVariables(variables);//生成邮箱字符串String content = templateEngine.process("sendCode.html", ctx);MimeMessage mimeMessage = javaMailSender.createMimeMessage();try {MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);//设置发送人helper.setFrom(from);//设置收件人helper.setTo(to);//设置主题if (username==null){username="";}helper.setSubject(username+"的邮箱验证码!");helper.setText(content,true);
//从类加载路径中获得ResourceClassPathResource classPathResource=new ClassPathResource("static/wangkantian.jpg");helper.addInline("logoUrl",classPathResource);javaMailSender.send(mimeMessage);} catch (MessagingException e) {log.info("{邮件发送错误}");throw new RuntimeException(e);}log.info("验证码为{}",code);return "success";}

下面来往邮箱里添加一个附件,顺便实现群发 的功能。

还挺有意思的!

@ResponseBody@GetMapping("/sendBachEmail")public String sendBatchEmail(String[]to,String motto){String subject="展信佳";Context context = new Context();context.setVariable("motto",motto);String content = templateEngine.process("good.html", context);MimeMessage mimeMessage = javaMailSender.createMimeMessage();//使用helper 让 mimeMessage设置相关邮件配置更加简便try {//记得开启helper的multipartMimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);//设置主题内容helper.setSubject(subject);//设置正文内容helper.setText(content,true);//图片resourceClassPathResource imgResource = new ClassPathResource("static/wangkantian.jpg");//附件FileClassPathResource fileResource=new ClassPathResource("static/学习HTML.docx");//添加附件和图片helper.addInline("logoUrl",imgResource);helper.addAttachment("秘密.html",fileResource);//批量发送邮件,此时to是字符串数组helper.setTo(to);//设置发件人helper.setFrom(from);javaMailSender.send(mimeMessage);} catch (MessagingException e) {throw new RuntimeException(e);}return "success";}

三、易出错的点

1. 关于 @

对于我们服务器上的静态资源,比如下面这张图片,是可以直接访问到的。

因此,我们要想在theamleaf中达到同样的效果,就要使用@。

MimeMessage是JavaMail API中的一个类,用于表示电子邮件消息。它可以用来创建并设置邮件消息的各种属性,例如发件人、收件人、主题、内容和附件等。

MimeMessageHelper是Spring Framework中的一个类,它是对MimeMessage进行封装,提供了更加方便的API,以便于我们设置邮件的各种属性。例如,MimeMessageHelper可以帮助我们添加多个收件人、抄送、密送、内嵌图片和附件等。

因此,MimeMessage是JavaMail API中的一个基础类,而MimeMessageHelper是Spring Framework中对MimeMessage的封装,提供了更加便捷的API,使得我们可以更加方便地处理邮件消息。

错误汇总:

1. 遇见@ResponseBody与 String返回值的冲突

Error resolving template [success], template might not exist or might not be accessible by any of the configured Template Resolvers

一般来讲,模板解析时,会根据String类型的返回值,来返回是哪个html页面,但此时,我们只需要返回一个String 类型的数据,那么,我们就用用上@ResponseBody

templateEngine.process("index", ctx);  不奏效

  • TemplateEngine需要注入而不能使用new TemplateEngine()创建新实例,因为创建的新实例没有和TemplateResolver关联,使用process()方法读取文件时只显示文件名而不能解析文件内容。

如果有图片,那么一定要开启 multipart

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

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

相关文章

黑马程序员 Docker笔记

本篇学习笔记文档对应B站视频&#xff1a; 同学们&#xff0c;在前两天我们学习了Linux操作系统的常见命令以及如何在Linux上部署一个单体项目。大家想一想自己最大的感受是什么&#xff1f; 我相信&#xff0c;除了个别天赋异禀的同学以外&#xff0c;大多数同学都会有相同的…

【动态规划】【滑动窗口】C++算法:3003 执行操作后的最大分割数量

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 C算法&#xff1a;滑动窗口总结 动态规划 LeetCode3003 执行操作后的最大分割数量 给你一个下标从 0 开始的字符串 s 和一个整数 k。 你需要执行以下分割操作&#xff0c;直到字符串 s 变为 空&#xff1…

四大会计假设

目录 一. 会计主体假设二. 持续经营假设三. 会计期间假设四. 货币计量假设 \quad \quad 一. 会计主体假设 \quad 会计主体: 会计工作为其服务的特定单位或组织。 会计主体的定义 1.具有一定数量的资金。 2.进行独立的生产经营或其他活动。 3.实行独立核算。 \quad 会计主体假设…

openpyxl库根据模板生成文件api接口返回

openpyxl库是基于excel 2010 xlsx/xlsm文件读写的Python库&#xff08;请找寻xls文件读写的用户去搜寻pandas、xlrd 和 xlwt、pyexcel等库&#xff09;。安装openpyxl库&#xff1a; # 如果是pip pip install openpyxl # 如果是conda环境 conda install openpyxl 创建工作簿和工…

leetcode 125. 验证回文串

题目&#xff1a; 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &…

FreeRTOS——消息队列

学习目标 理解队列的概念掌握消息队列开发流程掌握基本数据类型消息队列掌握复杂数据类型消息队列学习内容 队列 队列(Queue)是一种数据结构,用于存储和管理元素的线性集合。它遵循先进先出(FIFO,First-In-First-Out)的原则,即最先进入队列的元素将首先被移出队列。 …

阅读文献-胃癌

写在前面 今天先不阅读肺癌的了&#xff0c;先读一篇胃癌的文章 文献 An individualized stemness-related signature to predict prognosis and immunotherapy responses for gastric cancer using single-cell and bulk tissue transcriptomes IF:4.0 中科院分区:2区 医学…

JFinal综合信息管理系统

项目地址&#xff1a;mendianyu/AdvancedManagement: 综合信息管理系统 (github.com) 项目演示地址&#xff1a;软件构造大作业演示视频_哔哩哔哩_bilibili 项目功能 一&#xff1a;基于Jfinal构建信息管理系统&#xff0c;要求包含用户管理&#xff0c;翻译业务模块管理&…

初识Spring

1.Spring官网&#xff1a; 2.官网学习的顺序&#xff1a;先学Spring,再学SpringBoot,然后SpringCloud,Spring Cloud Data Flow。 3.Spring Framework界面&#xff1a; 4.github上的源代码&#xff1a; 5.进入使用说明文档&#xff1a; 主要是根据这个进行学习的。 6.我们用mave…

单例模式实现案例

单例模式实现案例 文章目录 单例模式实现案例**饿汉式****枚举饿汉式****懒汉式****双检锁懒汉式****内部类懒汉式** 单例模式概念&#xff1a; 单例模式是一种创建型设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供全局访问点。这对于需要在系统中共享某个资源…

Textract python 很好用的库

如何在Python中使用Textract的文章&#xff1a; 在Python中使用Textract Textract是一个强大的文本提取工具&#xff0c;它可以从各种类型的文件中提取文本&#xff0c;包括PDF&#xff0c;Word文档&#xff0c;PowerPoint演示文稿&#xff0c;JPEG图像等。以下是如何在Python…

如何配置一台高性能的IBM服务器

在当今信息化时代&#xff0c;服务器作为企业数据存储、处理和传输的核心设备&#xff0c;其性能的优劣直接关系到企业的运营效率和安全性。而IBM作为全球领先的企业级服务器提供商&#xff0c;其产品广泛应用于各行各业。本文将为你详细介绍如何配置一台高性能的IBM服务器&…

Linux Debian12使用VSCode和Python搭建flask开发环境

一、安装VSCode 在Linux Debian12系统上安装VSCode教程可以参考网上相关教程。 二、安装Python 打开VSCode&#xff0c;安装python和python扩展包&#xff0c;如下图所示&#xff1a; 三、创建Python虚拟环境 1.新建文件夹testFlask 2.用vscode打开文件夹testFlask&#xf…

QT中线程的退出分析

QT中线程的退出分析 前言开发环境代码的整改第一次修改第一次修改引起的问题问题原因分析解决方法第二次修改前言 软件实际开发过程中有好几处要实现这么一个功能:PC端软件“应用程序重启” ,本来这是一段比较简单的事情,但是因为重启软件报通信异常(错误日志中有记录通信…

前端 TS 语法继承 多态 修饰符 readonly 抽象类 ts 基本写法 可选 剩余参数 函数重载 接口 类(3)

继承 继承之间的叫法 A类继承了B类&#xff0c;那么A类叫做子类&#xff0c;B类叫成基类 子类 ---》派生类 基类 ---》超类&#xff08;父类&#xff09; // 继承之间的叫法 // A类继承了B类&#xff0c;那么A类叫做子类&#xff0c;B类叫成基类 // 子类 ---》派生类 // 基类 …

阅读笔记lv.1

阅读笔记 sql中各种 count结论不同存储引擎计算方式区别count() 类型 责任链模式常见场景例子&#xff08;闯关游戏&#xff09; sql中各种 count 结论 innodb count(*) ≈ count(1) > count(主键id) > count(普通索引列) > count(未加索引列)myisam 有专门字段记录…

Open3D 计算点云空间分布密度(16)

Open3D 计算点云空间分布密度(16) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 使用八叉树来估计点云密度可以通过统计每个体素内部的点的数量来实现。Open3D库中的VoxelGrid数据结构可以帮助完成这一任务。 二、算法实现 1.代码 代码如下(示例): import open3…

langchain-Agent-Agent类型和自定义Agent(代码)

本篇主要用于记忆Agent相关代码&#xff0c;不对各个类型Agent的功能和原理进行描述。 文章目录 代理类型reactplan&executestructured-chat 自定义代理 代理类型 react from langchain.agents import load_tools from langchain.agents import initialize_agent from l…

计算机体系结构----缓存一致性/多处理机

本文严禁转载&#xff0c;仅供学习使用。参考资料来自中国科学院大学计算机体系结构课程PPT以及《Digital Design and Computer Architecture》、《超标量处理器设计》、同济大学张晨曦教授资料。如有侵权&#xff0c;联系本人修改。 本文衔接上文计算机体系结构----存储系统 …

python爬虫,验证码识别,携带cookies请求

古诗词网案例!!! 识别验证码类型: # 此处用到的图片验证码识别网址为:http://ttshitu.com/ 图鉴 import base64 import json import requests # 一、图片文字类型(默认 3 数英混合): # 1 : 纯数字 # 1001:纯数字2 # 2 : 纯英文 # 1002:纯英文2 # 3 : 数英混合 # 1003:…