abubakar-shaikh-dev/ping250
GitHub: abubakar-shaikh-dev/ping250
一款基于 Next.js 的 SMTP 测试工具,帮助开发者快速验证邮件凭据、发送测试邮件并诊断 SPF/DKIM/DMARC 配置问题。
Stars: 1 | Forks: 0
# Ping250 - **发送测试,获取 250。**
使用 Nodemailer 验证 SMTP 凭据并发送真实的测试邮件——如果发送失败,您将获得失败的确切原因。
[](#)
[](https://nextjs.org)
[](https://www.typescriptlang.org)
[](#license)
| | |
| --- | --- |
| `docs/assets/console-dark.png` — *控制台,深色主题* | `docs/assets/console-light.png` — *浅色主题* |
| `docs/assets/error-auth.png` — *直观的身份验证失败报告* | `docs/assets/diagnostics.png` — *SPF/DKIM/DMARC 报告* |
## 安全性
- **服务端不持久化存储凭据。** 凭据仅用于构建临时的 transport 并在使用后立即丢弃;`logger`/`debug` 处于关闭状态,因此不会有任何信息输出到 stdout。无数据库,无服务器日志,也不会在 cookie 中存储任何敏感信息。
- **全方位验证。** 每个字段都会通过 Zod schema 进行校验;每次请求的收件人数量限制为一个(这是一款测试工具,并非群发器);附件会经过严格的大小和字符集检查。
- **基于 IP 的限流。** 生产环境中通过 Upstash 实现滑动窗口限制(默认为:验证 10次/分钟,发送 5次/分钟),并为本地开发提供了内存回退机制。
- **CSRF 防护。** 同源检查可阻止跨站浏览器请求;JSON 内容类型会强制触发 CORS 预检请求作为第二道防线。有关权衡取舍,请参阅 [`SECURITY.md`](./SECURITY.md)。
- **客户端加密配置。** 使用基于 PBKDF2-SHA256(21万次迭代)的密钥进行 AES-256-GCM 加密;只有密文会被存储在 `localStorage` 中,密码口令绝不会离开当前页面。
### 访问拦截
v1 版本通过 **Cloudflare Turnstile**(一项托管式人机校验)来对发送/验证操作进行拦截,而不是依赖账号系统或邀请码。原因在于:这款工具应当能够无需注册即可顺畅使用,但由于它涉及转发真实邮件,因此绝不能成为一个开放中继(open relay)——Turnstile 能够拦截脚本滥用,同时让真实用户只需点击一次即可通过。它与单 IP 限流器和单收件人限制配合使用。在本地开发时,设置 `NEXT_PUBLIC_TURNSTILE_ENABLED=false`(或使用 Cloudflare 提供的始终通过的测试密钥)即可跳过该组件。
## 留存功能 —— 分阶段推出
**已在 v1 版本中发布(核心功能):**
1. **客户端加密配置** —— 保存在浏览器中并经过加密的具名配置(如“Gmail — 个人”、“SES — 生产”),支持一键切换。
2. **测试历史** —— 本地运行日志(包含服务商、状态、响应时间、错误信息),支持过滤以及导出为 CSV/JSON。绝不保留邮件正文或凭据。
3. **可送达性诊断** —— SPF/DKIM/DMARC 检查,并附带通俗易懂的报告。
4. **定时探活检查** —— 包含 webhook/Slack 告警的定期健康检查。*需要 Vercel Cron Jobs 或外部调度程序;无法在普通的 Serverless 函数上运行——已明确标注。*
5. **可分享的脱敏报告** —— 剔除凭据信息的链接/JSON 格式的结果摘要。
6. **CLI / API 模式** —— 用于 CI/CD 部署前检查的独立鉴权且文档完善的 endpoint。
7. **命令面板**(`Cmd+K`) —— 快速切换服务商、发送邮件以及搜索历史记录。
v1 的架构在设计中刻意**没有**预先考虑第 4 至第 7 项功能(没有引入任务队列,也没有账号鉴权系统)——它始终保持着与已发布功能范围相匹配的极简性。
## 部署 (Vercel)
1. 推送代码仓库并在 [Vercel](https://vercel.com/new) 中导入。框架预设选择:**Next.js**。
2. 设置环境变量:
- `NEXT_PUBLIC_APP_URL` —— 生产环境 URL(用于规范标签、OG、站点地图及 CSRF 主机检查)。
- `TURNSTILE_SECRET_KEY`、`NEXT_PUBLIC_TURNSTILE_SITE_KEY`、`NEXT_PUBLIC_TURNSTILE_ENABLED=true`。
- `UPSTASH_REDIS_REST_URL`、`UPSTASH_REDIS_REST_TOKEN` —— 生产环境中实现共享限流**必需**(内存回退机制在 Serverless 实例间无法生效)。
- 可选配置 `RATE_LIMIT_*_PER_MIN` 以及非敏感的 `DEFAULT_SMTP_*` 预填充项。
3. 部署。SMTP 路由运行在 Node.js 运行时上(`export const runtime = "nodejs"`),Vercel 会自动识别并选择该运行时。
## 许可证
[MIT](./LICENSE) © [Abubakar Shaikh](https://abubakarshaikh.dev).
使用 Nodemailer 验证 SMTP 凭据并发送真实的测试邮件——如果发送失败,您将获得失败的确切原因。
[](#)
[](https://nextjs.org)
[](https://www.typescriptlang.org)
[](#license)
标签:SMTP, Syscall, Tailwind CSS, TypeScript, Web开发, 安全插件, 自动化攻击, 邮件测试