#!/usr/bin/env node /** * 测试邮件发送功能 * 验证 SMTP 配置是否正确 */ const nodemailer = require('nodemailer'); const fs = require('fs'); const path = require('path'); require('dotenv').config(); async function testEmailSend() { console.log('📧 测试邮件发送功能\n'); // 检查配置 if (!process.env.SMTP_HOST || !process.env.SMTP_USER || !process.env.SMTP_PASS) { console.error('❌ 缺少 SMTP 配置,请检查 .env 文件'); process.exit(1); } // 创建测试会话 const testToken = 'TEST' + Date.now().toString(36).toUpperCase(); const sessionMapPath = process.env.SESSION_MAP_PATH || path.join(__dirname, 'src/data/session-map.json'); // 确保目录存在 const dir = path.dirname(sessionMapPath); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } // 创建会话 const sessions = fs.existsSync(sessionMapPath) ? JSON.parse(fs.readFileSync(sessionMapPath, 'utf8')) : {}; sessions[testToken] = { type: 'pty', createdAt: Math.floor(Date.now() / 1000), expiresAt: Math.floor((Date.now() + 3600000) / 1000), // 1小时后过期 cwd: process.cwd(), description: '测试会话' }; fs.writeFileSync(sessionMapPath, JSON.stringify(sessions, null, 2)); console.log(`✅ 创建测试会话: ${testToken}\n`); // 创建邮件传输器 const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: parseInt(process.env.SMTP_PORT || '465'), secure: process.env.SMTP_SECURE === 'true', auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS } }); // 准备邮件内容 const mailOptions = { from: `${process.env.EMAIL_FROM_NAME || 'TaskPing'} <${process.env.EMAIL_FROM || process.env.SMTP_USER}>`, to: process.env.EMAIL_TO || 'jiaxicui446@gmail.com', subject: `[TaskPing #${testToken}] 测试邮件 - 等待您的指令`, html: `
这是一封测试邮件,用于验证邮件配置是否正确。
会话信息:
Token: ${testToken}
创建时间: ${new Date().toLocaleString('zh-CN')}
过期时间: ${new Date(Date.now() + 3600000).toLocaleString('zh-CN')}
📝 如何回复测试指令:
方式1(推荐):直接回复此邮件,内容输入:
echo "Hello from email"CMD: pwd
\`\`\`
ls -la
\`\`\`
方式2:从任何邮箱发送邮件到 noreply@pandalla.ai
主题必须包含:[TaskPing #${testToken}]
💡 多邮箱支持:
您可以从以下任意邮箱发送回复到 noreply@pandalla.ai:
回复路径:您的邮箱 → noreply@pandalla.ai → TaskPing系统处理
会话ID: ${testToken}
发送自: ${process.env.SMTP_USER}
通知邮箱: ${process.env.EMAIL_TO}
回复邮箱: ${process.env.SMTP_USER}
系统支持任意邮箱回复