java 实现发送邮件功能

今天分享一篇 java 发送 QQ 邮件的功能

环境:

jdk 1.8 + springboot 2.6.3 + maven 3.9.6

邮件功能依赖:

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>

配置:

spring.mail.protocol=smtp
spring.mail.port=587
# qq邮箱
spring.mail.host=smtp.qq.com
# 发件人邮箱
spring.mail.username=xxx@qq.com
# 这里替换为自己的发件人邮箱的授权码
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

获取授权码:

登录 QQ 邮箱网页版 -> 设置 -> 账号

  

往下翻:找到下面这一块区域,如果没有开启服务的,直接开启服务即可 然后点击管理服务

 

 然后点击生成授权码

注意:生成后需要记住,授权码只展示这一次,如果忘了,可以生成多个

 

发送简单邮件

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class Test1Controller {@Autowiredprivate JavaMailSender mailSender;@Value("${from.email:xxx@qq.com}")private String fromEmail;@Value("${to.email:xxx@qq.com}")private String toEmail;@GetMapping("test")public void test() {sendSimpleMail();}public void sendSimpleMail() {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(fromEmail); // 发件人邮箱message.setTo(toEmail);message.setSubject("主题:简单邮件");message.setText("内容:简单的邮件内容");mailSender.send(message);}
}

发送带附件的邮件

import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.mail.internet.MimeMessage;
import java.io.File;@RestController
public class Test1Controller {@Autowiredprivate JavaMailSender mailSender;@Value("${from.email:xxx@qq.com}")private String fromEmail;@Value("${to.email:xxx@qq.com}")private String toEmail;@GetMapping("test")public void test() {sendAttachmentsMail();}@SneakyThrowspublic void sendAttachmentsMail() {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setFrom(fromEmail);helper.setTo(toEmail);helper.setSubject("主题:有附件");helper.setText("内容:有附件的邮件");FileSystemResource file = new FileSystemResource(new File("C:\\Users\\11786\\Desktop\\blackground\\1.jpg"));// 这里可以上传多个文件,我这里就直接用一个文件了helper.addAttachment("file-1.jpg", file);helper.addAttachment("file-2.jpg", file);helper.addAttachment("file-2.jpg", file);mailSender.send(mimeMessage);}
}

使用 freemarker 发送模板邮件

在 resources -> templates -> email 目录下创建模板文件 template.ftl

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>邮件标题</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1 th:text="${username}">用户名</h1>
<p>这是一封模板邮件。</p>
</body>
</html>

发送邮件代码: 

import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.mail.internet.MimeMessage;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;@RestController
public class Test1Controller {@Autowiredprivate JavaMailSender mailSender;@Autowiredprivate Configuration freemarkerConfig;@Value("${from.email:xxx@qq.com}")private String fromEmail;@Value("${to.email:xxx@qq.com}")private String toEmail;@GetMapping("test")public void test() {sendTemplateMail();}@SneakyThrowspublic void sendTemplateMail() {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setFrom(fromEmail);helper.setTo(toEmail);helper.setSubject("主题:模板邮件");// 创建数据模型Map<String, Object> model = new HashMap<>();model.put("username", "heyue");// 获取模板Template template = freemarkerConfig.getTemplate("email/template.ftl");// 渲染模板Writer out = new StringWriter();template.process(model, out);String htmlContent = out.toString();// 设置邮件内容helper.setText(htmlContent, true);// 发送邮件mailSender.send(mimeMessage);}
}

使用 thymeleaf 发送模板邮件

需要先引入依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

配置:

# 指定模板文件位置
spring.thymeleaf.prefix=classpath:/templates/email/
# 模板文件类型
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.template-resolver-order=1

在 resources -> templates -> email 目录下创建模板文件 template.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>邮件标题</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1 th:text="${username}">用户名</h1>
<p>这是一封模板邮件。</p>
</body>
</html>

发送邮件代码:

import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;import javax.mail.internet.MimeMessage;
import java.io.StringWriter;@RestController
public class Test1Controller {@Autowiredprivate JavaMailSender mailSender;@Autowiredprivate ApplicationContext applicationContext;@Value("${from.email:xxx@qq.com}")private String fromEmail;@Value("${to.email:xxx@qq.com}")private String toEmail;@GetMapping("test")public void test() {sendTemplateMail();}@SneakyThrowspublic void sendTemplateMail() {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setFrom(fromEmail);helper.setTo(toEmail);helper.setSubject("主题:模板邮件");// 获取 Thymeleaf 模板引擎TemplateEngine templateEngine = applicationContext.getBean(TemplateEngine.class);// 创建上下文并设置变量Context context = new Context();context.setVariable("username", "heyue");// 渲染模板StringWriter writer = new StringWriter();templateEngine.process("template", context, writer);String htmlContent = writer.toString();// 设置邮件内容helper.setText(htmlContent, true);// 发送邮件mailSender.send(mimeMessage);}
}

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

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

相关文章

idea打包war包部署到tomcat以及访问路径问题

idea将web项目打包成war最重要的是配置atrificats。 首先打开file -》 project structure 创建之后&#xff0c;output directory即为输出war包的路径。Name可以随意&#xff0c;之后点击绿色&#xff0c;打开directory content 选择webapp目录&#xff0c;记得勾选include in…

(C语言)浮点数在内存中的存储详解

1. 浮点数 常见的浮点数&#xff1a;3.14159、 1E10等 &#xff0c;浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表示的范围&#xff1a; float.h 中定义. 2. 浮点数的存储 我们先来看一串代码&#xff1a; int main() {int n 9;float* pFloa…

安全工具介绍 SCNR/Arachni

关于SCNR 原来叫Arachni 是开源的&#xff0c;现在是SCNR&#xff0c;商用工具了 可试用一个月 Arachni Web Application Security Scanner Framework 看名字就知道了&#xff0c;针对web app 的安全工具&#xff0c;DASTIAST吧 安装 安装之前先 sudo apt-get update sudo…

嵌入式数据库--SQLite

目录 1. SQLite数据库简介 2. SQLite数据库的安装 方式一&#xff1a; 方式二&#xff1a; 3. SQLite的命令用法 1.创建一个数据库 2.创建一张表 3.删除表 4.插入数据 5. 查询数据 6.删除表内一条数据 7.修改表中的数据 8.增加一列也就是增加一个字段 1. SQLite数据库…

LeetCode每日一题——统计桌面上的不同数字

统计桌面上的不同数字OJ链接&#xff1a;2549. 统计桌面上的不同数字 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 这是一个很简单的数学问题&#xff1a; 当n 5时&#xff0c;因为n % 4 1&#xff0c;所以下一天4一定会被放上桌面 当n 4…

Linux系统 安装docker

安装&#xff1a; 1、Docker要求CentOS系统的内核版本高于 3.10 &#xff0c;通过 uname -r 命令查看你当前的内核版本是否支持安账docker 2、更新yum包&#xff1a; sudo yum -y update 3、安装需要的软件包&#xff0c;yum-util 提供yum-config-manager功能&#xff0c;另外…

kvm虚拟化

kvm虚拟化 1. 虚拟化介绍 虚拟化是云计算的基础。简单的说&#xff0c;虚拟化使得在一台物理的服务器上可以跑多台虚拟机&#xff0c;虚拟机共享物理机的 CPU、内存、IO 硬件资源&#xff0c;但逻辑上虚拟机之间是相互隔离的。 物理机我们一般称为宿主机&#xff08;Host&…

深度学习pytorch——多层感知机反向传播(持续更新)

在讲解多层感知机反向传播之前&#xff0c;先来回顾一下多输出感知机的问题&#xff0c;下图是一个多输出感知机模型&#xff1a; 课时44 反向传播算法-1_哔哩哔哩_bilibili 根据上一次的分析深度学习pytorch——感知机&#xff08;Perceptron&#xff09;&#xff08;持续更新…

数学(算法竞赛、蓝桥杯)--快速幂

1、B站视频链接&#xff1a;G01 快速幂_哔哩哔哩_bilibili 题目链接&#xff1a;P1226 【模板】快速幂 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc.h> using namespace std; typedef long long LL; int a,b,p; int quickpow(LL a,int n,int p){…

Wear-Any-Way——可控虚拟试衣一键试穿,可自定义穿着方式

概述 Wear-Any-Way 是阿里巴巴最新推出的虚拟试衣技术&#xff0c;它不仅可以让用户在虚拟环境中试穿衣服&#xff0c;还可以根据需要自定义衣服的样式&#xff0c;比如卷起袖子、打开或拖动外套等。这种技术的引入旨在帮助消费者更好地了解衣服在不同穿着方式下的效果&#x…

2024年国内彩妆行业市场数据分析:增长机会在哪?

从伊蒂之屋、菲诗小铺等平价韩妆的退出&#xff0c;到全球第一眉妆贝玲妃的落幕&#xff0c;曾经的“网红”-“全网断货选手”纷纷退出中国市场。 有人认为是国内彩妆市场不景气&#xff1f;事实上&#xff0c;国内彩妆市场线上市场规模仍在持续扩大。根据鲸参谋数据统计&…

短视频矩阵系统源头技术开发--每一次技术迭代

短视频矩阵系统源头开发3年的我们&#xff0c;肯定是需求不断的迭代更新的&#xff0c;目前我们已经迭代了3年之久&#xff0c;写技术文章已经写了短视频矩阵系统&#xff0c;写了3年了&#xff0c;开发了3年了 短视频矩阵获客系统是一种基于短视频平台的获客游戏。短视频矩阵系…

提升质量透明度,动力电池企业的数据驱动生产实践 | 数据要素 × 工业制造

系列导读 如《“数据要素”三年行动计划&#xff08;2024—2026年&#xff09;》指出&#xff0c;工业制造是“数据要素”的关键领域之一。如何发挥海量数据资源、丰富应用场景等多重优势&#xff0c;以数据流引领技术流、资金流、人才流、物资流&#xff0c;对于制造企业而言…

ctfshow-web入门-反序列化

web254 先看题 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020-12-02 19:29:02 # email: h1xactfer.com # link: https://ctfer.com*/error_reporting(0); highlight_file(__FIL…

抖音视频关键词批量采集工具|视频无水印爬虫下载软件

抖音视频关键词批量采集工具&#xff1a; 最新推出的抖音视频关键词批量采集工具&#xff0c;为您提供一种便捷的方式通过关键词搜索和提取符合条件的视频内容。以下是详细的操作说明和功能解析&#xff1a; 操作说明&#xff1a; 进入软件后&#xff0c;在第一个选项卡页面…

Vue 3 + TypeScript + Vite的现代前端项目框架

随着前端开发技术的飞速发展&#xff0c;Vue 3、TypeScript 和 Vite 构成了现代前端开发的强大组合。这篇博客将指导你如何从零开始搭建一个使用Vue 3、TypeScript以及Vite的前端项目&#xff0c;帮助你快速启动一个性能卓越且类型安全的现代化Web应用。 Vue 3 是一款渐进式Jav…

立体统计图表绘制方法(分离式环图)

立体统计图表绘制方法&#xff08;分离式环形图&#xff09; 记得我学统计学的时候&#xff0c;那些统计图表大都是平面的框框图&#xff0c;很呆板&#xff0c;就只是表现出统计的意义就好了。在网络科技发展进步的当下&#xff0c;原来一些传统的统计图表都有了进一步的创新。…

Macbook pro M3 Max 128G使用体验

好久没写文章了&#xff0c;今天来谈谈M3 Max的使用感受。 Stable Diffusion: 使用ComfyUI来完成绘图任务&#xff0c;使用ByteDance/SDXL-Lightning模型微调版本 参数设置&#xff1a; 运行日志&#xff1a; [2024-03-24 17:11] 100%|███████████████████…

密码学之哈希碰撞和生日悖论

哈希碰撞 哈希碰撞是指找到两个不一样的值&#xff0c;它们的哈希值却相同 假设哈希函数的取值空间大小为k &#xff0c;计算次数为n 先算每个值不一样的概率P’ 所以至少两个值相同(即存在哈希碰撞)的概率P为 生日悖论 假设班里有50个人&#xff0c;求班里至少两个人相同…

安装IK分词器 + 扩展词典配置 + 停用词典配置

安装IK分词器 1.在线安装ik插件&#xff08;较慢&#xff09; # 进入容器内部 docker exec -it elasticsearch /bin/bash ​ # 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elastics…