一键向目标导师群发送陶瓷邮件,邮件内容基于你的简历和导师的介绍由LLM生成,支持任意LLMs服务商的api,推荐白嫖硅基流动的免费api!
您可以随时提交您的改进版本进main分支,欢迎共创,共同打造智能化学术申请!
🎉🎉 我们的项目在小红书获得了超2w浏览和超2k收藏啦!!
2025.10.12自动检索匹配导师的功能coming soon!2025.9.14【腾讯文档】Auto-Tutor教程:https://docs.qq.com/doc/DQU1oQ1phVmZxZEFZ ,这里面有免费的api key哦2025.9.5新增代理,支持科学上网,便于使用谷歌邮箱2025.9.4支持Gemini API接口
您可能的担心1:使用门槛?
零代码即可使用!直接在前端点点点即可!
可进行复核编辑!
您可能的担心3:找不到套磁记录?
本地自动存套磁记录log!
您可能的担心4:想自定义提示词实现一些套磁信的风格和内容?
支持自定义语言风格提示词!
如果您觉得有用,可以点亮star支持一下!
# 转到你系统上项目地址
cd project_path
# 安装最新版本的multer
npm install multer@latest
# 然后安装其他依赖
npm install
#启动服务
npm start启动脚本会自动完成:
- 检查 Node/npm
- 安装依赖(触发 postinstall 的 install.js)
- 生成 .env(若不存在则从 .env.example 复制)
- 创建 uploads 与 log 目录
- 以生产模式启动服务(默认端口 3000)
[2024-01-XX] [INFO] 服务器启动成功
[2024-01-XX] [INFO] 端口: 3000
[2024-01-XX] [INFO] 环境: production
[2024-01-XX] [INFO] 日志级别: info
[2024-01-XX] [INFO] 上传目录: uploads
[2024-01-XX] [INFO] 速率限制: 10 requests per 900000ms
[2024-01-XX] [INFO] 服务器运行在 http://localhost:3000
# 在浏览器中打开
http://localhost:3000/tutor_email_system.html我们团队来自于北京大学,清华大学,中国科学院大学自动化所,中国科学技术大学,南京大学,福州大学,浙江大学,中南财经政法大学.
他们分别是:
- 李展利 中南财经政法大学
- 刘朝阳 浙江大学
- 杨鹏晖 清华大学
- 华英凡 中国科学技术大学
- 汤家福 南京大学
- 赵俊杰 上海交通大学
- 黄士洪 南京农业大学
- 田雨萱 中科院自动化所
- 王彬宇 南京大学
- 徐泽远 福州大学
- 刘芮彤 北京大学
- 蔡清苒 西安电子科技大学
- 张辰 南京大学
- 更新中...
- 开启SMTP服务
登录 https://mail.qq.com
设置 → 账户 → POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
开启 "IMAP/SMTP服务"
- 获取授权码
点击 "生成授权码"
发送短信验证
保存16位授权码(非QQ密码)
- 配置参数
SMTP服务器: smtp.qq.com
SMTP端口: 587
加密方式: STARTTLS
用户名: 完整QQ邮箱地址
密码: 16位授权码
SMTP服务器: smtp.163.com
SMTP端口: 25 (非加密) / 465 (SSL) / 994 (SSL)
用户名: 完整163邮箱地址
密码: 邮箱授权码
SMTP服务器: smtp.gmail.com
SMTP端口: 587 (TLS) / 465 (SSL)
用户名: 完整Gmail地址
密码: 应用专用密码
注意: 需要开启两步验证并生成应用密码
SMTP服务器: smtp-mail.outlook.com
SMTP端口: 587
加密方式: STARTTLS
用户名: 完整Outlook邮箱地址
密码: 邮箱密码或应用密码
# 腾讯企业邮箱
SMTP服务器: smtp.exmail.qq.com
SMTP端口: 587 / 465
# 阿里云企业邮箱
SMTP服务器: smtp.mxhichina.com
SMTP端口: 25 / 465
# 使用文本编辑器打开.env文件
nano .env
# 或者
vim .env
# 或者使用任何文本编辑器# 服务器端口(默认3000)
PORT=3000
# 运行环境(development/production)
NODE_ENV=production
# 速率限制:15分钟内最多10次请求
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=10
# 文件上传限制:最大10MB
MAX_FILE_SIZE_MB=10
ALLOWED_FILE_TYPES=application/pdf
# 邮件内容限制
MAX_EMAIL_CONTENT_LENGTH=50000
MAX_EMAIL_SUBJECT_LENGTH=200
# 网页抓取超时:30秒
FETCH_TIMEOUT_MS=30000
MAX_CONTENT_SIZE_MB=5
# 日志级别:error/warn/info/debug
LOG_LEVEL=info- 邮件发送: 基于SMTP协议的安全邮件发送,支持附件
- 导师管理: 单个添加和CSV批量导入导师信息
- 网页抓取: 自动获取导师个人主页内容
- 文件上传: PDF简历附件上传(最大10MB)
- 日志系统: 四级日志(error/warn/info/debug)
- Node.js: >= 14.0
- npm: >= 6.0
- 内存: >= 512MB
- 磁盘: >= 100MB可用空间
- 网络: 需要访问SMTP服务器和目标网站
tutor-email-system/
├── tutor_email_system.html # 前端界面文件
├── email_server.js # Express后端服务器
├── package.json # 项目依赖和脚本配置
├── install.js # 自动安装脚本
├── .env.example # 环境变量配置模板
├── uploads/ # 文件上传目录(自动创建)
└── README.md # 项目文档
POST /api/send-email
Content-Type: application/json
{
"to": "professor@university.edu",
"subject": "邮件主题",
"body": "邮件正文",
"senderEmail": "your@email.com",
"senderPassword": "授权码",
"smtpServer": "smtp.qq.com",
"smtpPort": "587",
"attachment": "base64编码的文件内容(可选)",
"attachmentName": "resume.pdf(可选)"
}POST /api/fetch-website
Content-Type: application/json
{
"url": "https://professor-homepage.com"
}POST /api/upload
Content-Type: multipart/form-data
file: [PDF文件]// 在前端界面填写SMTP配置
const smtpConfig = {
senderEmail: 'your@qq.com',
senderPassword: '16位授权码',
smtpServer: 'smtp.qq.com',
smtpPort: '587'
};单个添加:
- 姓名:导师真实姓名
- 邮箱:有效的学术邮箱地址
- 学校:完整的学校名称
- 个人主页:可访问的URL(用于内容抓取)
CSV批量导入格式:
姓名,邮箱,学校,个人主页
Dr. Zhang,zhang@tsinghua.edu.cn,清华大学,https://www.tsinghua.edu.cn/zhang
Prof. Li,li@pku.edu.cn,北京大学,https://www.pku.edu.cn/li- 格式限制:仅支持PDF格式
- 大小限制:最大10MB
- 命名建议:使用英文文件名,避免特殊字符
- 配置验证:系统自动验证SMTP连接
- 内容抓取:获取导师主页内容(超时30秒)
- 邮件组装:合并个人信息、抓取内容和附件
- 批量发送:遵循速率限制(15分钟内最多10封)
- 状态反馈:实时显示发送结果和错误信息
# 检查Node.js是否正确安装
node --version
npm --version
# 如果提示"命令未找到"或"不是内部命令"
# Windows: 重新安装Node.js并确保添加到PATH
# macOS/Linux: 检查环境变量
echo $PATH | grep node# 清理npm缓存
npm cache clean --force
# 删除node_modules重新安装
rm -rf node_modules package-lock.json
npm install
# 使用淘宝镜像(中国用户)
npm config set registry https://registry.npmmirror.com
npm install# 检查端口占用
# Windows
netstat -ano | findstr :3000
taskkill /PID <进程ID> /F
# macOS/Linux
lsof -ti:3000
kill -9 $(lsof -ti:3000)
# 或者修改.env文件使用其他端口
PORT=3001# 检查错误日志
node email_server.js
# 常见错误及解决方案:
# Error: Cannot find module 'xxx'
npm install
# Error: EADDRINUSE (端口占用)
# 修改PORT环境变量或杀死占用进程
# Error: EACCES (权限不足)
# Linux/macOS: sudo node email_server.js
# 或修改端口到1024以上# 检查uploads目录权限
ls -la uploads/
# 创建目录并设置权限
mkdir -p uploads
chmod 755 uploads
# Windows用户检查目录是否存在
dir uploads
md uploads// 常见错误码及解决方案
// 535 Authentication failed
// - 检查邮箱地址和授权码
// - 确认SMTP服务已开启
// 550 Mailbox not found
// - 检查收件人邮箱地址
// - 确认邮箱域名正确
// 421 Too many connections
// - 降低发送频率
// - 检查速率限制配置# 测试网络连接
curl -I https://target-website.com
# 检查DNS解析
nslookup target-website.com
# 常见问题:
# - 网站需要登录:无法抓取受保护内容
# - 反爬虫机制:网站阻止自动访问
# - 网络超时:增加FETCH_TIMEOUT_MS值
# - SSL证书问题:检查HTTPS网站证书# 监控内存使用
# Linux/macOS
top -p $(pgrep node)
# Windows
tasklist | findstr node.exe
# 优化建议:
# - 限制并发邮件发送数量
# - 定期清理临时文件
# - 调整LOG_LEVEL为warn或error# 调整超时设置
FETCH_TIMEOUT_MS=15000
MAX_CONTENT_SIZE_MB=2
# 限制请求频率
RATE_LIMIT_WINDOW_MS=600000
RATE_LIMIT_MAX_REQUESTS=5# 修改.env文件
LOG_LEVEL=debug
NODE_ENV=development# 使用curl测试邮件发送
curl -X POST http://localhost:3000/api/send-email \
-H "Content-Type: application/json" \
-d '{
"to": "test@example.com",
"subject": "测试邮件",
"body": "这是一封测试邮件",
"senderEmail": "your@qq.com",
"senderPassword": "授权码",
"smtpServer": "smtp.qq.com",
"smtpPort": "587"
}'
# 测试网页抓取
curl -X POST http://localhost:3000/api/fetch-website \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'# .env文件权限设置
# Linux/macOS
chmod 600 .env
# 不要将.env文件提交到版本控制
echo ".env" >> .gitignore// 使用授权码而非登录密码
const smtpConfig = {
user: process.env.SMTP_USER,
pass: process.env.SMTP_AUTH_CODE, // 16位授权码
host: process.env.SMTP_HOST,
port: process.env.SMTP_PORT,
secure: false, // 使用STARTTLS
requireTLS: true
};// 服务器端文件类型验证
const allowedMimeTypes = ['application/pdf'];
const maxFileSize = 10 * 1024 * 1024; // 10MB
// 文件名安全处理
const sanitizeFilename = (filename) => {
return filename.replace(/[^a-zA-Z0-9.-]/g, '_');
};# 防止滥用的速率限制
RATE_LIMIT_WINDOW_MS=900000 # 15分钟
RATE_LIMIT_MAX_REQUESTS=10 # 最多10次请求- 仅在可信网络环境下运行
- 使用防火墙限制访问端口
- 定期更新Node.js和依赖包
- 监控系统日志异常活动
MIT License
本系统仅供学术交流和研究使用。使用者应当:
- 遵守相关法律法规和学术道德规范
- 尊重邮件接收者的隐私权
- 避免发送垃圾邮件或进行骚扰行为
- 对使用本系统产生的任何后果承担责任
开发者不对使用本系统造成的任何直接或间接损失承担责任。



