🔧 邮件SMTP凭据注入+部署脚本补全∞版本服务文件

- 邮件错误提示优化: 隐藏内部SMTP配置细节,显示友好的"邮件服务维护中"
- 部署脚本: 新增inject_smtp_credentials函数,deploy-v3/deploy-infinity自动注入SMTP到.env.keys
- 部署脚本: 补全∞版本服务文件部署(email-hub.js/bandwidth-pool-agent.js/user-guardian-agent.js/auto-evolution.js)
- 部署workflow: 传递ZY_SMTP_USER/ZY_SMTP_PASS到大脑服务器部署步骤

Agent-Logs-Url: https://github.com/qinfendebingshuo/guanghulab/sessions/a6f72ab2-7227-4382-920c-0e1aa91dba2e

Co-authored-by: qinfendebingshuo <207279273+qinfendebingshuo@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-04-08 04:13:43 +00:00 committed by GitHub
parent 7ce2b51090
commit ffd9b8c803
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 56 additions and 2 deletions

View File

@ -109,6 +109,8 @@ jobs:
ZY_SVR_SV_REALITY_PUBLIC_KEY: ${{ secrets.ZY_SVR_SV_REALITY_PUBLIC_KEY }}
ZY_SVR_SV_REALITY_SHORT_ID: ${{ secrets.ZY_SVR_SV_REALITY_SHORT_ID }}
ZY_SVR_SV_PORT: ${{ secrets.ZY_SVR_SV_PORT }}
ZY_SMTP_USER: ${{ secrets.ZY_SMTP_USER }}
ZY_SMTP_PASS: ${{ secrets.ZY_SMTP_PASS }}
run: |
ACTION="${{ github.event.inputs.action }}"
ssh -i ~/.ssh/id_brain \
@ -118,6 +120,8 @@ jobs:
export ZY_SVR_SV_REALITY_PUBLIC_KEY=${ZY_SVR_SV_REALITY_PUBLIC_KEY:-} && \
export ZY_SVR_SV_REALITY_SHORT_ID=${ZY_SVR_SV_REALITY_SHORT_ID:-} && \
export ZY_SVR_SV_PORT=${ZY_SVR_SV_PORT:-443} && \
export ZY_SMTP_USER='${ZY_SMTP_USER:-}' && \
export ZY_SMTP_PASS='${ZY_SMTP_PASS:-}' && \
cd /opt/zhuyuan-brain/proxy-deploy && \
bash deploy-brain-proxy.sh ${ACTION}"

View File

@ -186,6 +186,14 @@ EOF
echo "ZY_SVR_SV_PORT=${ZY_SVR_SV_PORT:-443}" >> "$KEYS_FILE"
fi
# 保存SMTP邮件凭据 (带宽共享验证码·邮件通知)
if [ -n "${ZY_SMTP_USER:-}" ] && [ -n "${ZY_SMTP_PASS:-}" ]; then
echo "" >> "$KEYS_FILE"
echo "# SMTP邮件凭据 (带宽共享验证码·邮件通知)" >> "$KEYS_FILE"
echo "ZY_SMTP_USER=${ZY_SMTP_USER}" >> "$KEYS_FILE"
echo "ZY_SMTP_PASS=${ZY_SMTP_PASS}" >> "$KEYS_FILE"
fi
chmod 600 "$KEYS_FILE"
echo ""
@ -198,6 +206,33 @@ EOF
echo " ═══════════════════════════════════"
}
# ── 注入SMTP邮件凭据到.env.keys ──────────────
# 如果环境变量中有SMTP凭据且.env.keys中没有自动追加
inject_smtp_credentials() {
local KEYS_FILE="$PROXY_DIR/.env.keys"
if [ ! -f "$KEYS_FILE" ]; then
echo " ⚠️ .env.keys不存在跳过SMTP注入"
return
fi
if [ -z "${ZY_SMTP_USER:-}" ] || [ -z "${ZY_SMTP_PASS:-}" ]; then
echo " ZY_SMTP_USER/ZY_SMTP_PASS未提供跳过SMTP注入"
return
fi
# 如果.env.keys已有SMTP配置更新之
if grep -q "ZY_SMTP_USER" "$KEYS_FILE" 2>/dev/null; then
# 移除旧的SMTP行并重新追加
sed -i '/^ZY_SMTP_USER=/d' "$KEYS_FILE"
sed -i '/^ZY_SMTP_PASS=/d' "$KEYS_FILE"
sed -i '/^# SMTP邮件凭据/d' "$KEYS_FILE"
fi
echo "" >> "$KEYS_FILE"
echo "# SMTP邮件凭据 (带宽共享验证码·邮件通知)" >> "$KEYS_FILE"
echo "ZY_SMTP_USER=${ZY_SMTP_USER}" >> "$KEYS_FILE"
echo "ZY_SMTP_PASS=${ZY_SMTP_PASS}" >> "$KEYS_FILE"
chmod 600 "$KEYS_FILE"
echo " ✅ SMTP凭据已注入到 .env.keys"
}
# ── 部署V2服务代码 ────────────────────────────
deploy_services() {
mkdir -p "$PROXY_DIR"/{service,data,logs,config}
@ -217,6 +252,12 @@ deploy_services() {
cp "$REPO_PROXY_DIR"/service/proxy-guardian.js "$PROXY_DIR/service/"
cp "$REPO_PROXY_DIR"/ecosystem.brain-proxy-v3.config.js "$PROXY_DIR/"
# 复制∞版本服务文件 (邮件·带宽共享·守护·自动进化)
cp "$REPO_PROXY_DIR"/service/email-hub.js "$PROXY_DIR/service/" 2>/dev/null || true
cp "$REPO_PROXY_DIR"/service/bandwidth-pool-agent.js "$PROXY_DIR/service/" 2>/dev/null || true
cp "$REPO_PROXY_DIR"/service/user-guardian-agent.js "$PROXY_DIR/service/" 2>/dev/null || true
cp "$REPO_PROXY_DIR"/service/auto-evolution.js "$PROXY_DIR/service/" 2>/dev/null || true
# 复制V2 Nginx配置参考
cp "$REPO_PROXY_DIR"/config/nginx-brain-proxy-snippet.conf "$PROXY_DIR/config/" 2>/dev/null || true
cp "$REPO_PROXY_DIR"/config/nginx-brain-proxy-v3-snippet.conf "$PROXY_DIR/config/" 2>/dev/null || true
@ -595,6 +636,9 @@ deploy_v3() {
echo "部署V3生产环境 (V2继续可用)..."
deploy_services
# 注入SMTP凭据到.env.keys (如果环境变量中有且.env.keys中没有)
inject_smtp_credentials
# 清理 sites-enabled/ 中残留的备份文件(防止 duplicate default_server
clean_stale_nginx_backups
@ -771,6 +815,9 @@ deploy_infinity() {
echo "部署 ∞ 版本 (在V3基础上添加自主进化能力)..."
deploy_services
# 注入SMTP凭据到.env.keys (如果环境变量中有且.env.keys中没有)
inject_smtp_credentials
# 确保V3进程已在运行
if ! pm2 list 2>/dev/null | grep -q "zy-proxy-v3-sub"; then
echo " ⚠️ V3进程未运行先部署V3..."

View File

@ -2223,13 +2223,16 @@ async function submitCode(e) {
} else {
const errDetail = result.error || '未知原因';
console.error('[bandwidth-send-code] 邮件发送失败:', errDetail);
// 对用户隐藏内部配置细节,只显示友好提示
const userMsg = errDetail.includes('SMTP') ? '邮件服务维护中' : errDetail;
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
res.end(JSON.stringify({ success: false, message: `📧 邮件发送失败(${errDetail}),请稍后重试或联系冰朔获取验证码` }));
res.end(JSON.stringify({ success: false, message: `📧 ${userMsg},请稍后重试或联系冰朔获取验证码` }));
}
}).catch((err) => {
console.error('[bandwidth-send-code] 邮件发送异常:', err.message || err);
const userMsg = (err.message || '').includes('SMTP') ? '邮件服务维护中' : (err.message || '发送异常');
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
res.end(JSON.stringify({ success: false, message: `📧 邮件发送异常(${err.message}),请稍后重试或联系冰朔获取验证码` }));
res.end(JSON.stringify({ success: false, message: `📧 ${userMsg},请稍后重试或联系冰朔获取验证码` }));
});
} catch {
// Email module not available - code was still created