在开发 Spring Boot 项目时,经常需要实现发送邮件的功能,例如用户注册的邮箱验证码、忘记密码邮件等。通常,邮箱账号和密码会写在配置文件 application.yml
中,但这样做存在安全隐患:
- 敏感信息暴露:一旦提交到 Git 仓库,邮箱账号和密码就可能被泄露。
- 多环境不灵活:开发、测试、生产环境可能使用不同邮箱,如果写死在配置文件里,每次都需要修改。
为了解决这个问题,我们可以将 邮箱账号和密码存放到环境变量 中,让 Spring Boot 从环境变量安全读取。下面详细说明操作步骤。
1️⃣ 在电脑/服务器上设置环境变量
Windows PowerShell
powershell
setx MAIL_USERNAME "0811500009@163.com"
setx MAIL_PASSWORD "eagfsdcJssgXsa"
Linux / macOS
bash
export MAIL_USERNAME="0811500009@163.com"
export MAIL_PASSWORD="eagfsdcJssgXsa"
⚠️ 设置好后,最好重新启动 IDE 或终端,让环境变量生效。
2️⃣ 修改 application.yml
使用占位符
在配置文件中使用 ${环境变量名}
形式占位,Spring Boot 会自动读取:
yaml
mail:
host: smtp.163.com
username: ${MAIL_USERNAME} # 从环境变量读取
password: ${MAIL_PASSWORD} # 从环境变量读取
code:
overtime: 5
这样就不用在配置文件里暴露邮箱账号和密码。
3️⃣ Java 代码里使用
通过 @ConfigurationProperties
注入配置:
java
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "mail")
public class MailCodeConfig {
private String host;
private String username;
private String password;
private Code code;
public static class Code {
private int overtime;
// getter / setter
}
// getter / setter
}
然后在代码里直接使用:
java
String username = mailCodeConfig.getUsername();
String password = mailCodeConfig.getPassword();