java发送邮件到qq邮箱





自己的授权码自己记好
引入依赖
<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version>
</dependency>
<dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.4.7</version>
</dependency>
controller层代码
package com.cao.controller;import com.cao.pojo.Mail;
import com.cao.utils.EmailUtils;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api/email")
@Slf4j
public class SendEmailController {@PostMapping("/send") // http://localhost:8080/api/email/sendpublic String sendEmail(@RequestBody Mail mail) {Gson gson = new Gson();log.info("输入的mail对象是: {}", gson.toJson(mail));try {EmailUtils.createMimeMessage(mail.getSendEmail(),mail.getReceiveEmail(),mail.getReceiveName(),mail.getSubject(),mail.getSendName(),mail.getContent());return "发送完成";} catch (Exception e) {log.error("发送出现了异常", e);throw new RuntimeException(e);}}
}
Service层代码
package com.cao.utils;import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;public class EmailUtils {/*** 发件⼈邮箱密码 - 登录邮件开启 SMTP 服务后,邮件服务商⽣成的“授权码”*/public static final String authorizeCode = "oeqdschg1122lhgecbe12"; //自己的授权码替换下/*** 发件⼈SMTP服务器地址,⼀般的格式为:smtp.xxx.com,其中xxx为邮件服务商名称*/public static final String smtpHost = "smtp.qq.com";/*** 协议*/public static final String protocol = "smtp";public static Session getEmailSession() {// 参数配置,⽤于连接邮件服务器Properties props = new Properties();// 使⽤协议props.setProperty("mail.transport.protocol", protocol);// 发件⼈邮箱的 SMTP 服务器地址props.setProperty("mail.smtp.host", smtpHost);// 需要请求认证props.setProperty("mail.smtp.auth", "true");// 创建会话对象,⽤于与邮箱服务器交互Session session = Session.getInstance(props);// 设置为debug模式,在控制台中可以查看详细的发送⽇志session.setDebug(true);return session;}/*** 发送邮件的工具类*/public static MimeMessage createMimeMessage(String sendEmail, String receiveEmail, String receiveName, String subject, String sendName, String content) throws Exception {Session session = getEmailSession();// 1.创建邮件对象MimeMessage message = new MimeMessage(session);// 2.设置发件⼈,其中 InternetAddress 有三个参数,分别为:邮箱,显示的昵称,昵称的字符集编码message.setFrom(new InternetAddress(sendEmail, sendName, "UTF-8"));// 3.设置收件⼈ - MimeMessage.RecipientType.TOmessage.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveEmail, receiveName, "UTF-8"));// 4.设置邮件主题message.setSubject(subject, "UTF-8");// 5.设置邮件正⽂内容,指定格式为HTML格式message.setContent(content, "text/html;charset=UTF-8");// 6.设置显示发件时间message.setSentDate(new Date());// 7.保存设置message.saveChanges();// 8.根据 Session 获取邮件传输对象Transport transport = session.getTransport();// 9.连接邮件服务器transport.connect(sendEmail, authorizeCode);// 10.发送邮件transport.sendMessage(message, message.getAllRecipients());// 11.关闭连接transport.close();return message;}
}
测试: 调用controller


查看是否有邮件收到


相关文章:
java发送邮件到qq邮箱
自己的授权码自己记好 引入依赖 <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version> </dependency> <dependency><groupId>javax.mail</groupId>&…...
MySQL中的JSON数据类型计数及多张表COUNT的数据相加
1.使用场景:在MySQL中,JSON作为一种数据类型存储在表的列中。需计算键值对的数量。 2.方法:SELECT COUNT(chief>$.number) FROM t_projectapplication where id #{id};(t_projectapplication:表;chief&…...
XDOJ78.机器人
标题 机器人 类别 综合 时间限制 1S 内存限制 256Kb 问题描述 机器人按照给定的指令在网格中移动,指令有以下四种: N 向北(上)移动 S 向南(下)移动 E 向东(右)移动 W 向西&…...
分布式系统架构设计之分布式事务的概述和面临的挑战
在当今大规模应用和服务的背景下,分布式系统的广泛应用已经成为了一种必然的主流趋势。然后,伴随着分布式系统的应用范围的增长,分布式事务处理成为了一个至关重要的关键话题。在传统的单体系统中,事务处理通常相对简单࿰…...
私有化部署你的甘特图协作工具
安装 首先去官网 https://zz-plan.com/deploy 下载对应的版本 arm是对应m1 m2 m3的mac amd是老的intel处理器 准备工作 安装mysql zz-plan需要依赖mysql 生成token 解压下载的压缩包 创建token./zz-plan -c 复制创建的token去获取授权码,点击获取免费授权码 …...
编程笔记 html5cssjs 011 HTML内连框架
编程笔记 html5&css&js 011 HTML内连框架 一、内连框架(一)意义(二)属性 二、操作注意 接下来要看一下网页内的划分。通过内连框架在当前页面嵌入一个特定内容,是一种特定需要。 一、内连框架 HTML 内联框架元…...
Stable Diffusion 系列教程 - 5 ControlNet
ControlNet和LORA的定位都是对大模型做微调的额外网络。作为入门SD的最后一块拼图是必须要去了解和开发的。为什么ControlNet的影响力如此的大?在它之前,基于扩散模型的AIGC是非常难以控制的,扩散整张图像的过程充满了随机性。这种随机性并不…...
【导出与导入Virtualbox虚拟机和启动连接openGauss数据库】
【导出与导入Virtualbox虚拟机和启动连接openGauss数据库】 一、导出虚拟机二、导入虚拟机三、启动数据库四、使用Data Studio连接数据库 一、导出虚拟机 选择关机状态的虚拟机 -> 管理菜单 -> 导出虚拟电脑 点击完成后,需要等待一小段时间,如…...
“华为杯”杭州电子科技大学2023新生编程大赛---树
题目链接 Problem Description 给定一棵包含 n 个节点的带边权的树,树是一个无环的无向联通图。定义 xordist(u,v) 为节点 u 到 v 的简单路径上所有边权值的异或和。 有 q 次询问,每次给出 l r x,求 ∑rilxordist(i,x) 的值。 Input 测试…...
使用pnnx将Torch模型转换为ncnn
1. 引言 以往我们将Torch模型转换为ncnn模型,通常需经过Torch–>onnx,onnx–>ncnn两个过程。但经常会出现某些算子不支持的问题。 ncnn作者针对该问题,直接开发一个Torch直接转换ncnn模型的工具 (PNNX),以下为相关介绍及使…...
linux卸载小皮面板phpstudy教程
千万不要直接删文件夹! 千万不要直接删文件夹! 千万不要直接删文件夹! 我就是按照网上搜索的教程,直接删了,然后 系统就不停的崩溃 生成这种文件: -rw------- 1 root root 223M Dec 28 22:36…...
【萤火虫系列教程】1/5-Adobe Firefly 注册账号
001-Adobe Firefly 注册账号 AI时代如火如荼,Adobe也不甘落后,于今年3月份发布AI创意生成工具Firefly(中文翻译:萤火虫) Adobe Firefly简介 Adobe Firefly的官方介绍为:Firefly是Adobe产品中新的创意生成…...
【docker】Dockerfile 指令详解
一、Dockerfile 指令详解 Dockerfile是一个用于编写docker镜像生成过程的文件,其有特定的语法。Dockerfile的基本指令有十三个,分别是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD。 …...
内存管理机制
内存管理机制与内存映射相关。 一、C与C 之所以将C与C放在一起是因为C是C的超集; 但是C是面向过程语言,C是面向对象的语言; C与C都可以使用malloc、calloc、realloc来申请内存空间; 其中void* malloc(size_t size)是在内存的动态…...
Jenkins工具使用
学习目录: 1、jenkins的安装 2、junkins的常规使用 3、jenkins在接口自动化测试实践 具体内容: 1、jenkins的安装 安装包下载:推荐Index of /jenkins/war/latest/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror,…...
SpringBoot从配置文件中获取属性的方法
方式一:Value 基本类型属性注入,直接在字段上添加Value("${xxx.xxx}")即可.注意这里用的是$,而不是#,Value注入的属性,一般其他属性没有关联关系。 配置文件 user:name: Manaphyage: 19sex: m…...
oracle物化视图
物化视图定义 视图是一个虚拟表(也可以认为是一条语句),基于它创建时指定的查询语句返回的结果集,每次访问它都会导致这个查询语句被执行一次,为了避免每次访问都执行这个查询,可以将这个查询结果集存储到…...
基于ssm校园线上订餐系统的设计与实现论文
摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…...
鸿蒙南向开发—OpenHarmony技术编译构建框架
概述 OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能: 以部件为最小粒度拼装产品和独立编译。支持轻量、小型、标准三种系…...
Android Jetpack学习系列——Navigation
写在前面 Google在2018年就推出了Jetpack组件库,但是直到今天我才给重视起来,这真的不得不说是一件让人遗憾的事。过去几年的空闲时间里,我一直在尝试做一套自己的组件库,帮助自己快速开发,虽然也听说过Jetpack&#…...
一键获取国家中小学智慧教育平台电子课本:开源解析工具完全指南
一键获取国家中小学智慧教育平台电子课本:开源解析工具完全指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 …...
从ShareGPT项目拆解现代全栈开发:Next.js、Serverless与Chrome扩展实战
1. 项目概述与核心价值如果你和我一样,经常在ChatGPT里进行一些天马行空的对话,从构思一部科幻小说的世界观,到一步步推导一个复杂的编程问题,再到让它扮演苏格拉底和你辩论哲学,这些对话记录本身就是宝贵的数字资产。…...
深入Windows内核的“心脏”:通过WRK源码理解ntoskrnl.exe与HAL的协作机制
深入Windows内核的“心脏”:通过WRK源码理解ntoskrnl.exe与HAL的协作机制 在计算机科学领域,操作系统内核堪称最复杂的软件工程之一。作为Windows操作系统的核心,ntoskrnl.exe与硬件抽象层(HAL)的协作机制长期以来都是开发者们津津乐道的话题…...
深度学习正则化(三)—— 提前终止 + 参数共享 + 稀疏表示(三十)
1. 定位导航 正则化 5 篇中,本篇承前启后: 第 28:参数范数惩罚(L1/L2)— 加在损失函数上 第 29:数据增强、噪声、半监督 — 操作数据 第 30(本篇):提前终止、参数共享、稀疏表示 — 隐式正则化 第 31:Bagging + Dropout 第 32:对抗训练 + 切面分类 本篇的三个方法表…...
从Anaconda虚拟环境到Docker镜像:一份给数据科学家的迁移指南(避坑Dockerfile编写)
从Anaconda到Docker:数据科学家的环境迁移实战手册 当你的机器学习模型在本地运行良好,却在同事的电脑上频频报错时;当论文评审要求提供可复现的实验环境时;当需要将训练好的模型部署到云服务器时——conda虚拟环境的局限性便开始…...
使用Taotoken后如何清晰观测API用量与成本变化
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后如何清晰观测API用量与成本变化 对于团队管理者或开发者而言,将大模型能力集成到产品中后,资…...
XUnity.AutoTranslator终极指南:5分钟破解Unity游戏语言障碍
XUnity.AutoTranslator终极指南:5分钟破解Unity游戏语言障碍 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 当你打开心爱的日系RPG游戏,却因为语言不通而无法理解剧情时ÿ…...
冥想第一千八百七十八天(1878)
1.周二,5.12日,天气晴朗,下午阴,项目上全力以赴的一天。今天是休息日,下班带溪溪去游泳。 2.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。...
对比直接使用厂商API,Taotoken在路由容灾上的体验差异
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商API,Taotoken在路由容灾上的体验差异 1. 引言:服务稳定性的现实挑战 在将大模型能力集成…...
传统认为越早进入行业越占优势,编程统计入行时间,行业红利数据,行业成熟期入行风险更低收益更稳。
“入行时间与行业红利期的匹配关系分析” 为主题,给出一套工程化、可教学、可复现的分析示例。一、实际应用场景描述(Business Context)在职业规划、行业研究与人才策略中,普遍存在一种观点:“越早进入一个行业&#x…...
