This commit is contained in:
dengqichen 2025-11-16 21:27:33 +08:00
parent 774a6c118a
commit 969f9cdb5d
2 changed files with 46 additions and 14 deletions

View File

@ -79,8 +79,8 @@ class ImapConnector {
const sinceDate = new Date(); const sinceDate = new Date();
sinceDate.setDate(sinceDate.getDate() - sinceDays); sinceDate.setDate(sinceDate.getDate() - sinceDays);
// 搜索条件最近N天的未读邮件 // 搜索条件最近N天的所有邮件(包括已读)
this.imap.search(['UNSEEN', ['SINCE', sinceDate]], async (err, results) => { this.imap.search([['SINCE', sinceDate]], async (err, results) => {
if (err) { if (err) {
reject(err); reject(err);
return; return;

View File

@ -32,9 +32,8 @@ class EmailVerificationService {
logger.info('EmailVerification', `接收邮箱: ${recipientEmail}`); logger.info('EmailVerification', `接收邮箱: ${recipientEmail}`);
try { try {
// 1. 连接邮箱 // 1. 初始化连接器
this.connector = new ImapConnector(this.config); this.connector = new ImapConnector(this.config);
await this.connector.connect();
// 2. 等待验证码邮件 // 2. 等待验证码邮件
const startTime = Date.now(); const startTime = Date.now();
@ -45,15 +44,48 @@ class EmailVerificationService {
attempts++; attempts++;
logger.info('EmailVerification', `${attempts} 次检查邮件...`); logger.info('EmailVerification', `${attempts} 次检查邮件...`);
// 获取最新邮件 // 关键每次都重新连接以获取最新邮件QQ邮箱IMAP有延迟问题
const emails = await this.connector.getLatestEmails(10, 1); if (attempts > 1) {
logger.info('EmailVerification', '断开并重新连接以刷新邮件...');
this.connector.disconnect();
await this.sleep(1000);
}
await this.connector.connect();
// 获取最新邮件(倒序排列)
const emails = await this.connector.getLatestEmails(20, 1);
if (emails && emails.length > 0) { if (emails && emails.length > 0) {
logger.info('EmailVerification', `找到 ${emails.length} 封未读邮件`); logger.info('EmailVerification', `找到 ${emails.length}邮件`);
// 3. 查找匹配的邮件并提取验证码 // 打印最近5条邮件信息倒序最新的在前
for (const email of emails.reverse()) { // 从最新的开始 const recentEmails = emails.slice(-5).reverse();
logger.info('EmailVerification', `检查邮件: 发件人="${email.from}", 主题="${email.subject}"`); logger.info('EmailVerification', '='.repeat(60));
logger.info('EmailVerification', '最近5条邮件');
recentEmails.forEach((email, index) => {
const dateStr = email.date ? new Date(email.date).toLocaleString('zh-CN') : 'N/A';
logger.info('EmailVerification', ` ${index + 1}. 时间: ${dateStr}`);
logger.info('EmailVerification', ` 发件人: ${email.from}`);
logger.info('EmailVerification', ` 主题: ${email.subject}`);
logger.info('EmailVerification', ` 收件人: ${email.to}`);
});
logger.info('EmailVerification', '='.repeat(60));
// 3. 查找匹配的邮件并提取验证码(从最新的开始)
for (const email of emails.reverse()) {
logger.info('EmailVerification', `检查邮件: 发件人="${email.from}", 主题="${email.subject}", 收件人="${email.to}"`);
// 关键:检查收件人是否匹配
const emailTo = (email.to || '').toLowerCase();
const isForRecipient = emailTo.includes(recipientEmail.toLowerCase());
if (!isForRecipient) {
logger.info('EmailVerification', ` ✗ 跳过:收件人不匹配(需要:${recipientEmail}`);
continue;
}
logger.info('EmailVerification', ` ✓ 收件人匹配!`);
for (const parser of this.parsers) { for (const parser of this.parsers) {
if (parser.canParse(email)) { if (parser.canParse(email)) {
@ -82,7 +114,7 @@ class EmailVerificationService {
} }
logger.warn('EmailVerification', `未找到匹配的Windsurf验证码邮件`); logger.warn('EmailVerification', `未找到匹配的Windsurf验证码邮件`);
} else { } else {
logger.info('EmailVerification', `没有未读邮件`); logger.info('EmailVerification', `没有邮件`);
} }
// 等待一段时间后再检查 // 等待一段时间后再检查