# 邮件发送问题诊断指南 ## 🔍 问题分析 根据你提供的日志,发现了以下情况: ### 日志分析 **你的日志显示:** ``` INFO ... VerificationCodeService : 邮件验证码发送成功,邮箱: 984523799@qq.com ``` **但是缺少以下关键日志:** - ❌ 没有看到 "当前邮件模板ID配置: xxx" - ❌ 没有看到 "未配置邮件模板ID,使用开发模式"(开发模式警告) - ❌ 没有看到 "使用生产模式发送邮件"(生产模式日志) - ❌ 没有看到 "开始发送邮件,收件人: ..."(TencentSesMailService日志) ### 可能的原因 1. **配置值未正确读取** - `template-id=154360` 可能没有被正确读取 - 默认值 `0` 被使用,进入了开发模式 - 但开发模式的警告日志也没有出现 2. **服务使用旧版本代码** - 可能运行的jar包是旧版本 - 需要重新编译并启动 --- ## 🛠️ 诊断步骤 ### 步骤1:检查配置是否正确读取 我已经更新了代码,添加了更详细的日志。请: 1. **重新编译项目** ```bash cd demo mvn clean package ``` 2. **重新启动服务** ```bash java -jar target/demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev ``` 3. **再次测试发送验证码** 4. **查看新的日志输出**,应该能看到: ``` INFO ... VerificationCodeService : 当前邮件模板ID配置: 154360 INFO ... VerificationCodeService : 使用生产模式发送邮件,收件人: xxx@qq.com, 模板ID: 154360 INFO ... TencentSesMailService : 开始发送邮件,收件人: xxx@qq.com, 主题: 验证码, 模板ID: 154360 ``` ### 步骤2:检查配置文件 确认 `application-dev.properties` 中的配置: ```properties tencent.ses.template-id=154360 ``` **注意:** - 确保没有空格 - 确保值是正确的数字 - 确保配置文件被正确加载(使用 `--spring.profiles.active=dev`) ### 步骤3:检查日志输出 **如果看到:** ``` INFO 当前邮件模板ID配置: 0 WARN 未配置邮件模板ID,使用开发模式 ``` **说明:** 配置值没有正确读取,使用的是默认值0。 **解决方案:** 1. 检查配置文件路径 2. 确认使用的是dev配置:`--spring.profiles.active=dev` 3. 检查配置文件名是否正确 **如果看到:** ``` INFO 当前邮件模板ID配置: 154360 INFO 使用生产模式发送邮件,收件人: xxx@qq.com, 模板ID: 154360 INFO 开始发送邮件,收件人: xxx@qq.com, 主题: 验证码, 模板ID: 154360 ERROR 邮件验证码发送失败,邮箱: xxx@qq.com ``` **说明:** 配置正确,但邮件发送失败。 **常见错误:** 1. **发信地址未验证** ``` InvalidParameter.EmailAddressNotVerified ``` **解决:** 在腾讯云SES控制台验证 `newletter@vionow.com` 2. **模板ID不存在或未审核** ``` ResourceNotFound.TemplateNotFound ``` **解决:** 确认模板ID 154360 已审核通过 3. **权限不足** ``` InvalidSecretId.InvalidSignature ``` **解决:** 检查SecretID/SecretKey是否正确,是否有SES服务权限 4. **额度不足** ``` 余额不足 ``` **解决:** 充值或检查免费额度 --- ## 🚀 快速测试方案 ### 方案1:临时使用开发模式测试 如果发信地址未验证或需要快速测试登录功能,可以临时切换到开发模式: 1. **修改配置文件** ```properties tencent.ses.template-id=0 ``` 2. **重新编译并启动** ```bash mvn clean package java -jar target/demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev ``` 3. **测试发送验证码** - 会看到日志:`开发模式:邮件验证码发送到: xxx@qq.com, 验证码: 123456` - 从日志中获取验证码用于登录测试 ### 方案2:检查SES配置状态 1. **访问SES控制台** - 发信地址管理:https://console.cloud.tencent.com/ses/address - 邮件模板管理:https://console.cloud.tencent.com/ses/template 2. **确认以下状态:** - [ ] `newletter@vionow.com` 状态为"已验证" - [ ] 模板ID `154360` 状态为"已审核" - [ ] SES服务有可用额度 --- ## 📝 诊断检查清单 请按照以下顺序检查: - [ ] **1. 配置检查** - 配置文件 `application-dev.properties` 中存在 `tencent.ses.template-id=154360` - 没有多余空格或特殊字符 - [ ] **2. 编译检查** - 执行了 `mvn clean package` - 编译成功,没有错误 - [ ] **3. 启动检查** - 使用 `--spring.profiles.active=dev` 启动 - 启动日志中没有配置相关的错误 - [ ] **4. 日志检查** - 重新启动后,测试发送验证码 - 查看日志中是否有新的详细信息 - [ ] **5. SES配置检查** - 发信地址已验证 - 模板ID已审核 - 有可用额度 --- ## 🔧 下一步操作 1. **立即执行:** ```bash cd demo mvn clean package java -jar target/demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev ``` 2. **再次测试发送验证码** 3. **查看新的日志输出**,告诉我你看到了什么日志信息 4. **根据新的日志信息,我可以进一步帮你诊断问题** --- ## ⚠️ 重要提示 **当前代码已更新,添加了更详细的日志输出。请重新编译并启动服务,然后再次测试。新的日志会帮助我们准确定位问题。**