#!/usr/bin/env node const fs = require('fs'); const path = require('path'); const readline = require('readline'); const dotenv = require('dotenv'); // 创建交互式命令行界面 const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); // 加载环境变量 const ENV_FILE_PATH = path.join(process.cwd(), '.env'); let envContent = ''; let emailConfigs = []; // 应用密码说明 function printAppPasswordInstructions() { console.log('\n===== 如何创建谷歌应用密码 ====='); console.log('1. 访问 https://myaccount.google.com/security'); console.log('2. 在"登录Google"部分,点击"两步验证"'); console.log(' (如果未启用两步验证,需要先启用)'); console.log('3. 在页面底部找到"应用密码",点击进入'); console.log('4. 在"选择应用"下拉菜单中选择"其他(自定义名称)"'); console.log('5. 输入一个名称,例如"Cursor注册"'); console.log('6. 点击"生成"'); console.log('7. 复制生成的16位应用密码(格式如:xxxx xxxx xxxx xxxx)'); console.log('注意: 应用密码只会显示一次,请务必保存好\n'); } // 加载当前环境变量和邮箱配置 function loadEnvironment() { try { if (!fs.existsSync(ENV_FILE_PATH)) { console.error('❌ .env文件不存在,请先运行setup.js进行初始化配置'); process.exit(1); } // 读取原始.env文件内容 envContent = fs.readFileSync(ENV_FILE_PATH, 'utf8'); // 解析环境变量 dotenv.config(); // 尝试解析当前的邮箱配置 try { const configStr = process.env.REGISTER_EMAIL_CONFIGS; if (configStr) { emailConfigs = JSON.parse(configStr); if (!Array.isArray(emailConfigs)) { emailConfigs = []; } } } catch (parseErr) { console.warn('⚠️ 解析当前邮箱配置出错,将使用空配置'); emailConfigs = []; } return true; } catch (error) { console.error(`❌ 加载环境变量失败: ${error.message}`); return false; } } // 保存更新后的邮箱配置到.env文件 function saveEmailConfigs() { try { // 将邮箱配置格式化为JSON字符串 const configStr = JSON.stringify(emailConfigs); // 替换.env文件中的配置 let newEnvContent = ''; if (envContent.includes('REGISTER_EMAIL_CONFIGS=')) { // 使用正则表达式替换REGISTER_EMAIL_CONFIGS行 newEnvContent = envContent.replace( /REGISTER_EMAIL_CONFIGS=.*/, `REGISTER_EMAIL_CONFIGS=${configStr}` ); } else { // 如果不存在该配置行,添加到文件末尾 newEnvContent = `${envContent}\nREGISTER_EMAIL_CONFIGS=${configStr}`; } // 同时确保USE_CONFIG_FILE设置为false if (newEnvContent.includes('REGISTER_USE_CONFIG_FILE=')) { newEnvContent = newEnvContent.replace( /REGISTER_USE_CONFIG_FILE=.*/, 'REGISTER_USE_CONFIG_FILE=false' ); } else { newEnvContent = `${newEnvContent}\nREGISTER_USE_CONFIG_FILE=false`; } // 确保EMAIL_SERVER设置为IMAP if (newEnvContent.includes('REGISTER_EMAIL_SERVER=')) { newEnvContent = newEnvContent.replace( /REGISTER_EMAIL_SERVER=.*/, 'REGISTER_EMAIL_SERVER=IMAP' ); } else { newEnvContent = `${newEnvContent}\nREGISTER_EMAIL_SERVER=IMAP`; } // 写入更新后的内容 fs.writeFileSync(ENV_FILE_PATH, newEnvContent, 'utf8'); console.log('✅ 邮箱配置已成功保存到.env文件'); return true; } catch (error) { console.error(`❌ 保存邮箱配置失败: ${error.message}`); return false; } } // 显示所有已配置的邮箱 function displayEmails() { console.log('\n===== 当前已配置的邮箱 ====='); if (emailConfigs.length === 0) { console.log('暂无已配置的邮箱'); return; } emailConfigs.forEach((config, index) => { console.log(`[${index + 1}] ${config.email}`); console.log(` IMAP服务器: ${config.imap_server}`); console.log(` IMAP端口: ${config.imap_port}`); console.log(` 用户名: ${config.username}`); console.log(` 应用密码: ${config.password}`); console.log(''); }); } // 添加新邮箱 function addEmail() { console.log('\n===== 添加新邮箱 ====='); printAppPasswordInstructions(); rl.question('请输入Gmail地址: ', (email) => { rl.question('请输入Gmail的应用密码 (不是邮箱密码): ', (password) => { // 创建新配置 const newConfig = { email: email, imap_server: 'imap.gmail.com', imap_port: 993, username: email, password: password }; // 添加到配置列表 emailConfigs.push(newConfig); console.log(`\n✅ 已添加邮箱: ${email}`); // 保存到.env文件 if (saveEmailConfigs()) { showMainMenu(); } }); }); } // 修改邮箱 function modifyEmail() { if (emailConfigs.length === 0) { console.log('\n❌ 当前没有可修改的邮箱。请先添加邮箱。'); showMainMenu(); return; } console.log('\n===== 修改邮箱 ====='); displayEmails(); rl.question('请输入要修改的邮箱序号 (1-' + emailConfigs.length + '): ', (indexStr) => { const index = parseInt(indexStr) - 1; if (isNaN(index) || index < 0 || index >= emailConfigs.length) { console.log('\n❌ 无效的序号。请重新选择。'); modifyEmail(); return; } const currentConfig = emailConfigs[index]; console.log(`\n正在修改邮箱: ${currentConfig.email}`); rl.question(`新的Gmail地址 (当前: ${currentConfig.email},直接回车保持不变): `, (email) => { const newEmail = email.trim() === '' ? currentConfig.email : email; rl.question('新的应用密码 (直接回车保持不变): ', (password) => { const newPassword = password.trim() === '' ? currentConfig.password : password; // 更新配置 emailConfigs[index] = { email: newEmail, imap_server: 'imap.gmail.com', imap_port: 993, username: newEmail, password: newPassword }; console.log(`\n✅ 已修改邮箱配置: ${newEmail}`); // 保存到.env文件 if (saveEmailConfigs()) { showMainMenu(); } }); }); }); } // 删除邮箱 function deleteEmail() { if (emailConfigs.length === 0) { console.log('\n❌ 当前没有可删除的邮箱。'); showMainMenu(); return; } console.log('\n===== 删除邮箱 ====='); displayEmails(); rl.question('请输入要删除的邮箱序号 (1-' + emailConfigs.length + '): ', (indexStr) => { const index = parseInt(indexStr) - 1; if (isNaN(index) || index < 0 || index >= emailConfigs.length) { console.log('\n❌ 无效的序号。请重新选择。'); deleteEmail(); return; } const emailToDelete = emailConfigs[index].email; rl.question(`确认删除邮箱 "${emailToDelete}"? (y/n): `, (answer) => { if (answer.toLowerCase() === 'y') { // 删除邮箱 emailConfigs.splice(index, 1); console.log(`\n✅ 已删除邮箱: ${emailToDelete}`); // 保存到.env文件 if (saveEmailConfigs()) { showMainMenu(); } } else { console.log('\n操作已取消'); showMainMenu(); } }); }); } // 显示主菜单 function showMainMenu() { console.log('\n===== 邮箱配置管理 ====='); console.log('1. 查看所有邮箱'); console.log('2. 添加新邮箱'); console.log('3. 修改邮箱'); console.log('4. 删除邮箱'); console.log('0. 退出'); rl.question('请选择操作 (0-4): ', (choice) => { switch (choice) { case '1': displayEmails(); showMainMenu(); break; case '2': addEmail(); break; case '3': modifyEmail(); break; case '4': deleteEmail(); break; case '0': console.log('\n✅ 配置完成,退出程序'); rl.close(); break; default: console.log('\n❌ 无效的选择,请重新输入'); showMainMenu(); break; } }); } // 主函数 async function main() { console.log('===== Cursor-To-OpenAI 邮箱配置管理 ====='); // 加载当前配置 if (loadEnvironment()) { // 显示主菜单 showMainMenu(); } else { console.error('程序退出'); rl.close(); } } // 运行主函数 main();