本文详细介绍如何使用 Node.js 的 Nodemailer 库,实现自动化测试报告(包括 HTML、JSON 或截图)通过邮件自动发送给相关人员,全面支持 Gmail、Outlook 等主流 SMTP 服务,并逐步说明配置步骤、安全凭证设置及附件添加方法。
自动化测试执行完毕,报告也已生成,但如何让团队成员第一时间获取测试结果?通过邮件发送带附件的报告是最直接的方式。这一需求在持续集成(CI)流程中几乎不可或缺——无论是基于 Selenium 的 Web UI 自动化测试,还是其他类型的自动化项目,测试报告的及时同步对于质量反馈闭环至关重要。
在 Node.js 生态中,Nodemailer 是一款成熟、轻量且广泛应用的邮件发送库,原生支持附件、HTML 内容、多收件人、抄送等特性,完全能够满足自动化测试报告(如 Allure 报告、JUnit XML、自定义 HTML 报告)的自动分发需求。接下来,我们将直接进入正题,详细介绍如何配置、发送邮件,以及安全地管理 SMTP 凭证。
✅ 快速入门:安装与基础配置
首先初始化项目,安装所需依赖,操作非常简单:
npm init -y npm install nodemailer
✅ 安全配置 SMTP 凭据(以 Gmail 为例)
⚠️ 注意:切勿在代码中硬编码密码。Gmail 要求使用“应用专用密码(App Password)”或启用两步验证后的 OAuth2 令牌。推荐做法如下:
- 开启 Google 账户的“两步验证”;
- 进入 Google App Passwords 页面,生成一个 16 位应用专用密码;
- 使用该密码填充 auth.pass 字段(而非账户登录密码)。
const nodemailer = require('nodemailer');
const fs = require('fs');
const transporter = nodemailer.createTransporter({
service: 'gmail', // 或显式配置:host: 'smtp.gmail.com', port: 465, secure: true
auth: {
user: 'your-email@gmail.com',
pass: 'your-app-specific-password' // ✅ 不是 Gmail 登录密码!
}
});
✅ 发送带附件的测试报告(核心示例)
假设 Selenium 测试执行后生成了 report.html 和 screenshots.zip 文件,可以通过以下方式附加多个附件:
const reportPath = './reports/report.html';
const zipPath = './reports/screenshots.zip';
transporter.sendMail({
from: '"Test Automation" ',
to: 'stakeholder@company.com, qa-team@company.com',
cc: 'manager@company.com',
subject: `【自动化测试报告】${new Date().toLocaleDateString()}`,
html: `✅ 自动化测试已完成
执行环境:Chrome v124 | 总用例数:42 | 通过率:95.2%
详见附件报告。
`,
attachments: [
{ filename: 'test-report.html', path: reportPath },
{ filename: 'screenshots.zip', path: zipPath },
// ✅ 也可直接传 Buffer 或字符串内容(如 JSON 报告)
{
filename: 'summary.json',
content: JSON.stringify({ passed: 40, failed: 2, duration: '2m18s' }, null, 2)
}
]
}).then(info => console.log('✅ 邮件已发送,Message ID:', info.messageId))
.catch(err => console.error('❌ 邮件发送失败:', err));
? 其他安全与最佳实践建议
- 环境隔离:将邮箱配置存放在 .env 文件中(配合 dotenv 加载),避免提交到版本控制系统;
- 错误重试机制:生产环境建议封装 sendMail() 并加入指数退避重试逻辑;
- 大附件处理:单封邮件附件总大小建议不超过 25MB;超限可改用云存储(如 AWS S3/Google Drive)生成临时下载链接嵌入邮件;
- 替代服务选项:若企业禁用 Gmail,Nodemailer 同样兼容 Outlook (service: 'hotmail')、腾讯企业邮、阿里云邮件推送等,只需调整 host/port/auth 参数。
✅ 总结与建议
Nodemailer 不仅解决了“发送带附件邮件”这一核心需求,更因其稳定性和完善的文档,成为 CI/CD 流水线(如 GitHub Actions、Jenkins)中集成邮件通知的事实标准。通过配合 Selenium 测试脚本的 afterAll 或 onFinish 钩子,即可实现“测试执行完成 → 报告生成 → 自动归档 → 邮件通知”的完整闭环。最后再次强调:安全凭证管理比功能实现更为重要——始终优先使用应用专用密码或 OAuth2,而非账户主密码。
