【spring boot】[发送邮件]-----springboot3 整合详细发送邮件、qq邮箱 企业微信邮箱(完整示例过程+代码)
本文介绍了基于SpringBoot3+MyBatis-Plus+Lombok+Nacos实现企业微信邮箱发送验证码的完整方案。核心内容包括:1) 引入SpringBoot邮件依赖;2) Nacos配置企业微信SMTP服务器参数;3) 创建EmailConfig配置类读取Nacos配置;4) 定义EmailService接口及实现类,包含验证码生成和邮件发送逻辑;5) 详细说明企业微信邮箱授权码获取
·
文章目录
前言
基于 springboot3 + mybatis-plus + lombok + nacos配置中心 完成企业微信给别人发邮箱验证码 或 发邮箱 案例
一、微信企业邮箱
添加以下依赖:
<!-- Spring Boot 邮件支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
nacos 配置
# 企业微信邮箱SMTP服务器
wechat:
email:
host: smtp.exmail.qq.com
port: 465
username: zhuguangbo@xxx.cn
password: your-auth-code
from: zhuguangbo@xxx.cn
timeout: 5000
ssl-enable: true
配置类
package com.zgb.app.core.config.email;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* 邮箱配置类,读取Nacos中的配置
* @author zhuguanbo
* @version 1.0.0
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "wechat.email")
public class EmailConfig {
/** 企业微信邮箱服务器地址 */
private String host;
/** 企业微信邮箱服务器端口 */
private Integer port;
/** 企业微信邮箱账号 */
private String username;
/** 企业微信邮箱密码/授权码 */
private String password;
/** 邮箱发送者 */
private String from;
/** 邮箱发送超时时间(毫秒) */
private Integer timeout;
/** 是否启用SSL */
private Boolean sslEnable;
}
接口层
package com.zgb.app.bese.service;
import java.util.concurrent.TimeUnit;
/**
* 邮箱服务接口
*/
public interface EmailService {
/**
* 发送验证码到指定邮箱
* @param email 目标邮箱地址
* @param expire 过期时间
* @param timeUnit 时间单位
* @return 发送结果
*/
boolean sendCaptcha(String email , long expire, TimeUnit timeUnit);
}
接口实现层
package com.zgb.app.bese.service.impl;
import com.zgb.app.bese.service.EmailService;
import com.zgb.app.core.config.email.EmailConfig;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Properties;
import java.util.Random;
import java.util.concurrent.TimeUnit;
/**
* 邮箱服务实现类
*/
@Service
public class EmailServiceImpl implements EmailService {
@Resource
private EmailConfig emailConfig;
/**
* 生成一个5位数的随机整数
* @return 生成的5位随机整数
*/
public static String generateCaptcha() {
Random random = new Random();
int min = 10000;
int max = 99999;
return min + random.nextInt(max - min + 1) + "";
}
/**
* 创建JavaMailSender实例
*/
private JavaMailSender createMailSender() {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost(emailConfig.getHost());
sender.setPort(emailConfig.getPort());
sender.setUsername(emailConfig.getUsername());
sender.setPassword(emailConfig.getPassword());
sender.setDefaultEncoding("UTF-8");
Properties props = sender.getJavaMailProperties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.timeout", String.valueOf(emailConfig.getTimeout()));
props.setProperty("mail.smtp.ssl.enable", String.valueOf(emailConfig.getSslEnable()));
// 补充SSL配置(针对465端口)
if (emailConfig.getSslEnable()) {
props.setProperty("mail.smtp.ssl.enable", "true");
props.setProperty("mail.smtp.ssl.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.ssl.checkserveridentity", "true");
}
// 开启调试模式,打印与服务器的交互细节
sender.setJavaMailProperties(props);
props.setProperty("mail.debug", "true"); // 关键:开启调试日志
return sender;
}
/**
* 发送验证码到指定邮箱
* @param email 目标邮箱地址
* @param expire 过期时间
* @param timeUnit 时间单位
* @return 发送结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean sendCaptcha(String email, long expire, TimeUnit timeUnit) {
// 生成验证码
String code = generateCaptcha();
// 发送邮件
try {
JavaMailSender mailSender = createMailSender();
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(emailConfig.getFrom());
message.setTo(email);
message.setSubject("【深圳xxxxx有限公司】验证码");
message.setText(String.format("您的验证码是: %s,有效期为1分钟。请勿向他人泄露。",code));
mailSender.send(message);
return true;
} catch (Exception e) {
// 记录日志
e.printStackTrace();
return false;
}
}
}
企业微信邮箱授权码的获取步骤:
- 登录企业微信邮箱
访问企业微信邮箱官网(https://exmail.qq.com/),使用你的企业邮箱账号和密码登录。

终极测试:用最小代码单独验证
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import java.util.Properties;
public class MailTest {
public static void main(String[] args) {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("smtp.exmail.qq.com");
sender.setPort(465);
sender.setUsername("zhuguangbo@sztyai.cn"); // 你的邮箱
sender.setPassword("这里填新生成的授权码"); // 务必重新生成
sender.setDefaultEncoding("UTF-8");
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.timeout", "5000");
props.setProperty("mail.smtp.ssl.enable", "true");
props.setProperty("mail.smtp.ssl.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.debug", "true"); // 开启调试
sender.setJavaMailProperties(props);
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("zhuguangbo@sztyai.cn"); // 必须与username一致
message.setTo("你的个人邮箱@qq.com"); // 接收测试的邮箱
message.setSubject("测试邮件");
message.setText("测试内容");
try {
sender.send(message);
System.out.println("发送成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、QQ邮箱
最小代码测试示例
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import java.util.Properties;
public class QQMailTest {
public static void main(String[] args) {
// 1. 配置邮件发送器
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("smtp.qq.com"); // QQ邮箱SMTP服务器
sender.setPort(465); // SSL端口
sender.setUsername("你的QQ邮箱@qq.com"); // 例如:123456@qq.com
sender.setPassword("你的授权码"); // 不是QQ密码,是SMTP授权码
sender.setDefaultEncoding("UTF-8");
// 2. 配置SSL和邮件属性
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtps"); // QQ邮箱推荐用smtps协议
props.setProperty("mail.smtps.auth", "true"); // 开启认证
props.setProperty("mail.smtps.ssl.enable", "true"); // 开启SSL
props.setProperty("mail.smtps.ssl.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.debug", "true"); // 开启调试日志
sender.setJavaMailProperties(props);
// 3. 创建邮件消息
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("你的QQ邮箱@qq.com"); // 必须与username一致
message.setTo("接收邮箱@example.com"); // 接收测试的邮箱
message.setSubject("QQ邮箱SMTP测试");
message.setText("这是一封通过SMTP发送的测试邮件");
// 4. 发送邮件
try {
sender.send(message);
System.out.println("邮件发送成功!");
} catch (Exception e) {
System.err.println("发送失败:" + e.getMessage());
e.printStackTrace();
}
}
}
nacos 配置
# QQ邮箱配置
spring:
mail:
# SMTP服务器地址(QQ邮箱固定为smtp.qq.com)
host: smtp.qq.com
# 端口(SSL加密端口465,非加密25,推荐465)
port: 465
# 发送者邮箱(你的QQ邮箱)
username: 123456@qq.com
# SMTP授权码(非QQ密码)
password: xxxxxxxxxxxxxxxx
# 发件人地址(必须与username一致)
from: 123456@qq.com
# 编码格式
default-encoding: UTF-8
# 超时设置
properties:
mail:
smtp:
timeout: 5000
auth: true
starttls:
enable: false
# SSL配置(针对465端口)
smtps:
ssl:
enable: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
# 调试模式(生产环境关闭)
debug: false
授权码获取方式


如果文章对你有一点点帮助,欢迎【点赞、留言、+ 关注】,
您的关注是我持续创作的重要动力!有问题欢迎随时交流!多一个朋友多一条路!
更多推荐
所有评论(0)