springboot集成qq邮箱发送邮件

news/2025/11/11 10:02:25/文章来源:https://www.cnblogs.com/LackyQueen/p/19209133

引入依赖:

<!-- JavaMail API -->
<dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.6.2</version>
</dependency>
<!-- JavaMail实现 -->
<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version>
</dependency>

工具类:

package com.woniu.controller;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;public class QQMailSender {// QQ邮箱SMTP服务器地址private static final String SMTP_HOST = "smtp.qq.com";// 端口号,SSL加密方式为465private static final String SMTP_PORT = "465";private String senderEmail;   // 发送者邮箱地址private String authCode;      // QQ邮箱授权码(不是登录密码)/*** 构造方法* @param senderEmail 发送者QQ邮箱* @param authCode 邮箱授权码*/public QQMailSender(String senderEmail, String authCode) {this.senderEmail = senderEmail;this.authCode = authCode;}/*** 发送邮件* @param receiver 收件人邮箱* @param subject 邮件主题* @param content 邮件内容* @return 发送成功返回true,否则返回false*/public boolean sendMail(String receiver, String subject, String content) {// 1. 配置邮件服务器属性Properties props = new Properties();props.put("mail.smtp.host", SMTP_HOST);         // SMTP服务器地址props.put("mail.smtp.port", SMTP_PORT);         // 端口号props.put("mail.smtp.auth", "true");            // 需要身份验证props.put("mail.smtp.ssl.enable", "true");      // 启用SSL加密props.put("mail.transport.protocol", "smtp");   // 协议类型// 2. 创建会话对象,设置身份验证Session session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(senderEmail, authCode);}});session.setDebug(false);  // 调试模式,true会输出详细发送日志try {// 3. 创建邮件消息MimeMessage message = new MimeMessage(session);// 设置发件人message.setFrom(new InternetAddress(senderEmail));// 设置收件人message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiver));// 设置邮件主题message.setSubject(subject, "UTF-8");  // 解决中文乱码// 设置邮件内容message.setText(content, "UTF-8");     // 解决中文乱码// 4. 发送邮件Transport.send(message);System.out.println("邮件发送成功!");return true;} catch (MessagingException e) {System.err.println("邮件发送失败:" + e.getMessage());e.printStackTrace();return false;}}/*** 测试方法*/public static void main(String[] args) {// 替换为你的QQ邮箱和授权码String senderEmail = "your_qq@qq.com";String authCode = "your_auth_code";// 创建发送者实例QQMailSender mailSender = new QQMailSender(senderEmail, authCode);// 发送测试邮件boolean result = mailSender.sendMail("recipient@example.com",  // 收件人邮箱"这是一封测试邮件",        // 邮件主题"你好,这是通过Java程序发送的QQ邮件测试!"  // 邮件内容);if (result) {System.out.println("测试邮件发送成功");} else {System.out.println("测试邮件发送失败");}}
}

封装之后的代码:

前提:qq授权码已经在本地环境变量配置好了,使用的是spingboot项目

yaml配置:

spring:mail:# QQ邮箱SMTP服务器地址host: smtp.qq.com# SMTP服务器端口(SSL加密方式)port: 465# 发送者QQ邮箱账号(替换为你的QQ邮箱)username: your_qq@qq.com# QQ邮箱授权码(不是登录密码,需要在QQ邮箱设置中获取)password: ${QQ_SMTP_PASSWORD}

配置类:

package com.woniu.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;@Component // 加入Spring容器管理
public class QQEmailSender {// QQ邮箱SMTP服务器地址private static final String SMTP_HOST = "smtp.qq.com";// SMTP端口,QQ邮箱为465private static final String SMTP_PORT = "465";@Value("${spring.mail.username}") // 从配置文件获取用户名private String username; // 发件人邮箱@Value("${spring.mail.password}")private String password; // 发件人邮箱授权码// 移除自定义构造方法,使用默认构造方法让Spring可以实例化public QQEmailSender () {}/*** 发送邮件** @param to      收件人邮箱* @param subject 邮件主题* @param content 邮件内容* @return 是否发送成功*/public boolean sendEmail (String to, String subject, String content) {// 配置邮件服务器属性Properties props = new Properties();props.put("mail.smtp.host", SMTP_HOST);props.put("mail.smtp.port", SMTP_PORT);props.put("mail.smtp.auth", "true");props.put("mail.smtp.ssl.enable", "true"); // 启用SSL加密props.put("mail.transport.protocol", "smtp");// 创建会话Session session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication () {// 此处的username和password必须是非空的return new PasswordAuthentication(username, password);}});try {// 创建邮件消息Message message = new MimeMessage(session);message.setFrom(new InternetAddress(username));message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));message.setSubject(subject);message.setText(content);// 发送邮件Transport.send(message);System.out.println("邮件发送成功!!!");return true;} catch (MessagingException e) {System.err.println("邮件发送失败: " + e.getMessage());e.printStackTrace();return false;}}
}

测试:

package com.woniu.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;/*** @Author: 王思莹* @Description:* @DateTime: 2025/11/11 9:46* @Component: 成都蜗牛学苑*/// 项目启动时自动执行测试
@Component
public class EmailTest implements CommandLineRunner {@Autowiredprivate QQEmailSender qqEmailSender; // 从Spring容器注入@Overridepublic void run(String... args) throws Exception {// 发送测试邮件qqEmailSender.sendEmail("to_qq@qq.com",  // 收件人邮箱"测试邮件",                // 主题"这是一封通过Java程序发送的测试邮件!"  // 内容);}
}

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

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

相关文章

R方分数

R-squared 分数(R Score),也称为决定系数(Coefficient of Determination)或简称R方,是回归分析中用来评估模型拟合优度的一个重要统计指标。它衡量了因变量(Y)的变异中可以被自变量(X)解释的比例。简单来说,…

银河麒麟KylinV10操作系统清理操作系统中的缓存drop_caches

1#释放缓存的方法:然来是因为服务进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches的默认参数设置的就是不释放的 drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释…

CentOS安装JAVA环境

1、下载安装包 访问Oracle官网:https://www.oracle.com/cn/java/technologies/downloads/#java25 这里以下载JDK25为例,如果需要下载JDK1.8等其他版本,也可以往下滑选择下载对应的版本即可。 2、解压安装包tar -xzv…

转载,也要有转载的道德吧

我的这篇文章 https://www.cnblogs.com/91program/p/19186389 刚发布没多久,发现被转载到 51CTO,但是没有任何转载的说明、且修改我博客的内容。https://blog.51cto.com/u_16099273/14302590

第11周 预习、实验与作业:流与文件

第11周 预习、实验与作业:流与文件第11周 预习、实验与作业:流与文件 目录第11周 预习、实验与作业:流与文件0.任务完成说明1. 预习1.1 学习目标1.2 预习任务1.3 课前问题列表2.实验3.课后任务(作业)3.1 课后复习…

2025年机场无障碍盲道砖生产厂家权威推荐榜单:火车站盲道砖/圆点盲道砖/高铁站盲道砖源头厂家精选

在无障碍环境建设日益受到重视的今天,盲道砖作为视障人士出行的重要保障,其产品质量与性能直接关系到公共设施的安全性与实用性。特别是在人流量大、使用频率高的机场、火车站、高铁站等交通枢纽,对盲道砖的性能要求…

C语言知识库 -- 完整C语言笔记目录,并且附带纯C项目源码《小鹅说 C 语言》

1、思维导图 2、完整笔记截图 3、项目源码截图 猜数字游戏 迷宫游戏(双人) 贪吃蛇游戏(单人/双1、思维导图2、完整笔记截图3、项目源码截图猜数字游戏迷宫游戏(双人)贪吃蛇游戏(单人/双人)俄罗斯方块1俄罗斯方块…

如何一键检测并修改公众号文章的错字和敏感词?

不知道你有没有过这种经历——公众号文章好不容易写完了,反复检查几遍觉得没问题,结果一发出去,立马就发现有个错别字,或者不小心用了个敏感词。真的特别影响编辑体验。 我之前也总为这个头疼,后来发现了一个特别…

Day34(4)-F:\硕士阶段\Java\课程资料\2025最新版JavaWeb+AI\资料\02. 前端Web基础(JS+Vue+Ajax)\资料\03. 基础代码\JS-Vue-01~12

JavaScriptJS-引入方式JS-基础语法数据类型JS-数据类型JS-函数JS-函数//3.JSON - JS对象标记法 let person ={ name: itcast, age: 18, gender:男 } alert(JSON.stringify(person));//js对象-->字符串 //{"nam…

Linux内核进程管理子系统有什么第六十六回 —— 进程主结构详解(62) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

HTML 01 【基础语法学习】 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年衡水出租救护车公司权威推荐榜单:长途救护车出租/跨省救护车出租/市内救护车出租服务公司精选

在医疗服务和患者转运领域,专业可靠的救护车租赁服务已成为医疗体系的重要补充。随着非急救医疗护送需求的日益增长,衡水地区的救护车租赁市场也呈现出专业化、规范化的发展趋势。本文将基于企业资质、服务范围、车辆…

2025年浓硫酸订做厂家权威推荐榜单:液体硝酸/工业级盐酸/工业级盐酸源头厂家精选

在化工行业快速发展的背景下,浓硫酸及相关化工原料生产企业的综合实力成为市场关注的焦点。本次调研综合企业市场覆盖能力、产品应用广度、客户合作稳定性及服务体系完善度等多维度数据,对国内浓硫酸及相关化工原料生…

vscode c语言 颜色设置

vscode c语言 颜色设置先按左下角设置图标再按右上角图标打开setting.json然后按照需求设置颜色{"editor.unicodeHighlight.nonBasicASCII": false,"workbench.colorCustomizations": { …

2025年乌鲁木齐黄金回收权威推荐榜单:黄金上门回收/黄金首饰加工/打金店源头商家精选

在贵金属回收与珠宝首饰加工领域,专业可靠的回收服务不仅关系到资产变现的价值,更直接影响到客户的财产安全与消费体验。本文将基于企业规模、资质认证、工艺水平、市场口碑等多维度数据,为您解析乌鲁木齐黄金回收行…

2025年华美月饼厂家权威推荐榜单:华美冰皮月饼/榴莲冰皮月饼/五仁月饼源头厂家及品牌代理精选

在月饼消费与礼品市场持续增长的背景下,厂家实力直接关系到产品的口感、安全性与性价比。本文将基于企业生产规模、产品体系、市场覆盖及客户反馈等多维度,为您解析华美月饼相关厂家的权威推荐榜单。 一、月饼市场与…

嵌入式系统的LCD多级菜单显示实现

一、硬件配置方案 1. 接口定义(以STM32+12864LCD为例) #define LCD_RS_PIN PA0 // 寄存器选择 #define LCD_RW_PIN PA1 // 读写控制 #define LCD_E_PIN PA2 // 使能信号 #define LCD_DATA PA4-PA11 // 数据…

转让发明专利

转让发明专利,5K; 专利号 名称 授权日期 领域2019111474822 鉴定长链非编码核糖核酸-转录因子-基因调控模体的方法 2022年03月15日 计算生物信息学,非编码RNA,lncRNA,转录调控2020102196623 …

2025年列管冷凝器制造企业权威推荐榜单:壳管式冷凝器/石墨冷凝器/蒸发式冷凝器源头厂家精选

2025年列管冷凝器制造企业权威推荐榜单:壳管式冷凝器/石墨冷凝器/蒸发式冷凝器源头厂家精选 在工业制冷与化工工艺快速发展的背景下,列管冷凝器作为热能交换系统的核心设备,其传热效率与运行稳定性直接影响生产能耗…

MySQL主从复制延迟诊断与GTID故障切换看我这篇就行了!

MySQL主从复制延迟诊断与GTID故障切换看我这篇就行了!概述 MySQL主从复制是企业级数据库架构的核心组件,广泛应用于读写分离、高可用集群、跨地域容灾等场景。GTID(全局事务标识符)技术的引入极大简化了复制管理和…