diff --git a/zero-point/core-channel/gatekeeper/engine-v3.js b/zero-point/core-channel/gatekeeper/engine-v3.js index 46fdb54..0e5e6b4 100644 --- a/zero-point/core-channel/gatekeeper/engine-v3.js +++ b/zero-point/core-channel/gatekeeper/engine-v3.js @@ -294,8 +294,10 @@ function checkWhitelist(sourceServer, personalityId) { // ═══════════════════════════════════════ function sendVerificationEmail(code, opType, callerName, callerPid, cmdPreview, targetEmail, targetName, serverIp) { return new Promise((resolve) => { - if (!SMTP.pass) { - log('WARN', 'email_skip', 'SMTP 授权码未配置'); + const sovereign = loadWhitelist().triads.find(t => t.human === 'ICE-GL∞' && t.email); + const smtpUser = SMTP.user || (sovereign && sovereign.email) || ''; + if (!SMTP.pass || !smtpUser) { + log('WARN', 'email_skip', 'SMTP 发件账号或授权码未配置'); resolve(false); return; } @@ -360,7 +362,7 @@ ICE-GL∞ 光湖语言系统 · 小湖灯自动发送 国作登字-2026-A-00037559`; const rawEmail = - `From: 光湖小湖灯 <${SMTP.user}>\r\n` + + `From: 光湖小湖灯 <${smtpUser}>\r\n` + `To: ${targetName} <${targetEmail}>\r\n` + `Subject: =?UTF-8?B?${Buffer.from(`${opInfo.icon} Gatekeeper授权 · ${callerName} · ${opInfo.label}`, 'utf-8').toString('base64')}?=\r\n` + `MIME-Version: 1.0\r\n` + @@ -379,7 +381,7 @@ ICE-GL∞ 光湖语言系统 · 小湖灯自动发送 `--${boundary}--\r\n` + `.\r\n`; - const authPlain = `\0${SMTP.user}\0${SMTP.pass}`; + const authPlain = `\0${smtpUser}\0${SMTP.pass}`; const socket = tls.connect({ host: SMTP.host, port: SMTP.port, rejectUnauthorized: false }, () => { let stage = 0; @@ -400,7 +402,7 @@ ICE-GL∞ 光湖语言系统 · 小湖灯自动发送 } else if (stage === 1) { if (isLast && code === 250) { stage = 2; socket.write('AUTH PLAIN ' + Buffer.from(authPlain).toString('base64') + '\r\n'); } } else if (stage === 2) { - if (code === 235) { stage = 3; socket.write('MAIL FROM:<' + SMTP.user + '>\r\n'); } + if (code === 235) { stage = 3; socket.write('MAIL FROM:<' + smtpUser + '>\r\n'); } else if (code >= 500) { log('WARN', 'smtp_auth_failed', line); socket.end(); resolve(false); return; } } else if (stage === 3) { if (code === 250) { stage = 4; socket.write('RCPT TO:<' + targetEmail + '>\r\n'); }