|
|
# Jenkins 邮件通知检查清单
|
|
|
|
|
|
## 问题:邮件没有触发
|
|
|
|
|
|
### 检查清单
|
|
|
|
|
|
#### 1. 检查 Jenkins 邮件配置
|
|
|
访问:`http://localhost:8084/configure`
|
|
|
|
|
|
**Extended E-mail Notification 配置:**
|
|
|
- [ ] SMTP server 已配置(如:smtp.qq.com)
|
|
|
- [ ] SMTP port 已配置(如:465)
|
|
|
- [ ] Use SMTP Authentication 已勾选
|
|
|
- [ ] User Name 已填写(完整邮箱地址)
|
|
|
- [ ] Password 已填写(授权码,不是邮箱密码)
|
|
|
- [ ] Use SSL 已勾选
|
|
|
- [ ] Default Recipients 已填写或 Jenkinsfile 中指定了收件人
|
|
|
|
|
|
**测试配置:**
|
|
|
- [ ] 点击 "Test configuration by sending test e-mail"
|
|
|
- [ ] 输入测试邮箱:ldl@chzu.edu.cn
|
|
|
- [ ] 点击 "Test configuration"
|
|
|
- [ ] 检查是否收到测试邮件
|
|
|
|
|
|
#### 2. 检查 Jenkinsfile 配置
|
|
|
- [ ] `to: 'ldl@chzu.edu.cn'` 已正确配置
|
|
|
- [ ] `emailext` 在 `post` 部分
|
|
|
- [ ] `post { success { ... } }` 配置正确
|
|
|
|
|
|
#### 3. 检查构建状态
|
|
|
邮件只在以下情况发送:
|
|
|
- [ ] **success** - 构建成功
|
|
|
- [ ] **failure** - 构建失败
|
|
|
- [ ] **unstable** - 构建不稳定(测试失败但继续)
|
|
|
|
|
|
**查看构建状态:**
|
|
|
```
|
|
|
访问:http://localhost:8084/job/slms/lastBuild/
|
|
|
查看:构建结果(SUCCESS/FAILURE/UNSTABLE)
|
|
|
```
|
|
|
|
|
|
#### 4. 检查 Jenkins 日志
|
|
|
访问:`http://localhost:8084/job/slms/lastBuild/console`
|
|
|
|
|
|
**搜索关键词:**
|
|
|
```
|
|
|
发送成功通知邮件
|
|
|
准备发送邮件到
|
|
|
成功通知邮件已发送
|
|
|
邮件发送失败
|
|
|
```
|
|
|
|
|
|
**如果看到错误:**
|
|
|
```
|
|
|
javax.mail.AuthenticationFailedException
|
|
|
```
|
|
|
→ 检查 SMTP 用户名和密码(授权码)
|
|
|
|
|
|
```
|
|
|
javax.mail.MessagingException: Could not connect to SMTP host
|
|
|
```
|
|
|
→ 检查 SMTP 服务器地址和端口
|
|
|
|
|
|
```
|
|
|
com.sun.mail.smtp.SMTPSendFailedException: 550 Invalid User
|
|
|
```
|
|
|
→ 检查收件人邮箱地址是否正确
|
|
|
|
|
|
#### 5. 检查邮箱设置
|
|
|
|
|
|
**QQ 邮箱:**
|
|
|
- [ ] 已开启 SMTP 服务
|
|
|
- [ ] 已生成授权码
|
|
|
- [ ] 授权码正确填写到 Jenkins
|
|
|
|
|
|
**163 邮箱:**
|
|
|
- [ ] 已开启 IMAP/SMTP 服务
|
|
|
- [ ] 已设置客户端授权密码
|
|
|
|
|
|
**企业邮箱:**
|
|
|
- [ ] 联系管理员确认 SMTP 配置
|
|
|
- [ ] 确认是否需要白名单
|
|
|
|
|
|
#### 6. 检查防火墙和网络
|
|
|
- [ ] Jenkins 服务器可以访问 SMTP 服务器
|
|
|
- [ ] SMTP 端口(465/587)未被防火墙阻止
|
|
|
|
|
|
**测试连接:**
|
|
|
```bash
|
|
|
# Windows
|
|
|
telnet smtp.qq.com 465
|
|
|
|
|
|
# 或使用 PowerShell
|
|
|
Test-NetConnection -ComputerName smtp.qq.com -Port 465
|
|
|
```
|
|
|
|
|
|
#### 7. 检查邮件插件
|
|
|
访问:`http://localhost:8084/pluginManager/installed`
|
|
|
|
|
|
**必需插件:**
|
|
|
- [ ] Email Extension Plugin (已安装且已启用)
|
|
|
- [ ] Mailer Plugin (已安装且已启用)
|
|
|
|
|
|
#### 8. 手动触发测试
|
|
|
|
|
|
**方法 1:在 Jenkins Script Console 测试**
|
|
|
访问:`http://localhost:8084/script`
|
|
|
|
|
|
```groovy
|
|
|
import javax.mail.*
|
|
|
import javax.mail.internet.*
|
|
|
|
|
|
def props = new Properties()
|
|
|
props.put("mail.smtp.host", "smtp.qq.com")
|
|
|
props.put("mail.smtp.port", "465")
|
|
|
props.put("mail.smtp.auth", "true")
|
|
|
props.put("mail.smtp.ssl.enable", "true")
|
|
|
|
|
|
def session = Session.getInstance(props, new Authenticator() {
|
|
|
protected PasswordAuthentication getPasswordAuthentication() {
|
|
|
return new PasswordAuthentication("your-email@qq.com", "your-auth-code")
|
|
|
}
|
|
|
})
|
|
|
|
|
|
def message = new MimeMessage(session)
|
|
|
message.setFrom(new InternetAddress("your-email@qq.com"))
|
|
|
message.addRecipient(Message.RecipientType.TO, new InternetAddress("ldl@chzu.edu.cn"))
|
|
|
message.setSubject("Jenkins 邮件测试")
|
|
|
message.setText("这是一封测试邮件")
|
|
|
|
|
|
Transport.send(message)
|
|
|
println "邮件发送成功!"
|
|
|
```
|
|
|
|
|
|
**方法 2:触发一次构建**
|
|
|
```bash
|
|
|
# 推送代码触发构建
|
|
|
git commit --allow-empty -m "test: 触发邮件测试"
|
|
|
git push
|
|
|
```
|
|
|
|
|
|
## 常见问题解决
|
|
|
|
|
|
### 问题 1: 收不到邮件但日志显示发送成功
|
|
|
**可能原因:**
|
|
|
- 邮件进入垃圾箱
|
|
|
- 邮箱服务器延迟
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 检查垃圾邮件文件夹
|
|
|
2. 将 Jenkins 邮箱加入白名单
|
|
|
3. 等待几分钟再检查
|
|
|
|
|
|
### 问题 2: 授权码认证失败
|
|
|
**可能原因:**
|
|
|
- 授权码输入错误
|
|
|
- 授权码已过期
|
|
|
- 未开启 SMTP 服务
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 重新生成授权码
|
|
|
2. 确认 SMTP 服务已开启
|
|
|
3. 复制粘贴授权码,避免手动输入错误
|
|
|
|
|
|
### 问题 3: 连接超时
|
|
|
**可能原因:**
|
|
|
- 防火墙阻止
|
|
|
- SMTP 端口错误
|
|
|
- 网络问题
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 检查防火墙设置
|
|
|
2. 确认端口:QQ/163 使用 465(SSL)或 587(TLS)
|
|
|
3. 测试网络连接
|
|
|
|
|
|
### 问题 4: 邮件内容乱码
|
|
|
**可能原因:**
|
|
|
- 字符集配置错误
|
|
|
|
|
|
**解决方案:**
|
|
|
在 Jenkins 配置中设置:
|
|
|
- Default Content Type: `text/html; charset=UTF-8`
|
|
|
- Charset: `UTF-8`
|
|
|
|
|
|
## 验证邮件功能
|
|
|
|
|
|
### 成功标志
|
|
|
- [ ] Jenkins 日志显示:`✓ 成功通知邮件已发送到: ldl@chzu.edu.cn`
|
|
|
- [ ] 收件箱收到邮件
|
|
|
- [ ] 邮件内容完整,链接可点击
|
|
|
- [ ] 邮件格式正确(HTML)
|
|
|
|
|
|
### 邮件内容应包含
|
|
|
- [ ] 构建编号
|
|
|
- [ ] 构建时间
|
|
|
- [ ] Git 提交信息
|
|
|
- [ ] 构建结果列表
|
|
|
- [ ] Jenkins 制品下载链接
|
|
|
- [ ] 头歌 Release 分支链接
|
|
|
- [ ] SonarQube 报告链接
|
|
|
|
|
|
## 当前配置
|
|
|
|
|
|
**收件人:** ldl@chzu.edu.cn
|
|
|
|
|
|
**邮件类型:**
|
|
|
1. ✅ 成功邮件 - 构建成功时发送
|
|
|
2. ❌ 失败邮件 - 构建失败时发送
|
|
|
3. ⚠️ 不稳定邮件 - 测试失败但继续时发送
|
|
|
|
|
|
**触发条件:**
|
|
|
- 每次构建完成后自动发送
|
|
|
- 根据构建结果选择邮件类型
|
|
|
|
|
|
## 下一步
|
|
|
|
|
|
如果以上都检查完毕仍然收不到邮件:
|
|
|
|
|
|
1. 查看 Jenkins 系统日志
|
|
|
- 访问:`http://localhost:8084/log/all`
|
|
|
- 搜索:`mail` 或 `email`
|
|
|
|
|
|
2. 启用调试日志
|
|
|
- 访问:`http://localhost:8084/log/`
|
|
|
- 添加新的 Logger:`hudson.plugins.emailext`
|
|
|
- 级别:`ALL`
|
|
|
|
|
|
3. 联系邮箱服务提供商
|
|
|
- 确认 SMTP 服务状态
|
|
|
- 检查是否有发送限制
|
|
|
|
|
|
4. 尝试其他邮箱
|
|
|
- 使用 Gmail 或 163 邮箱测试
|
|
|
- 排除特定邮箱的问题
|