springboot集成qq邮箱发送邮件
引入依赖:
<!-- 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加密方式为465
private 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() {
@Override
protected 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邮箱为465
private 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() {
@Override
protected 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 {
@Autowired
private QQEmailSender qqEmailSender; // 从Spring容器注入
@Override
public void run(String... args) throws Exception {
// 发送测试邮件
qqEmailSender.sendEmail(
"to_qq@qq.com", // 收件人邮箱
"测试邮件", // 主题
"这是一封通过Java程序发送的测试邮件!" // 内容
);
}
}

浙公网安备 33010602011771号