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();
sinceDate.setDate(sinceDate.getDate() - sinceDays);
// 搜索条件最近N天的未读邮件
this.imap.search(['UNSEEN', ['SINCE', sinceDate]], async (err, results) => {
// 搜索条件最近N天的所有邮件(包括已读)
this.imap.search([['SINCE', sinceDate]], async (err, results) => {
if (err) {
reject(err);
return;

View File

@ -32,9 +32,8 @@ class EmailVerificationService {
logger.info('EmailVerification', `接收邮箱: ${recipientEmail}`);
try {
// 1. 连接邮箱
// 1. 初始化连接器
this.connector = new ImapConnector(this.config);
await this.connector.connect();
// 2. 等待验证码邮件
const startTime = Date.now();
@ -45,15 +44,48 @@ class EmailVerificationService {
attempts++;
logger.info('EmailVerification', `${attempts} 次检查邮件...`);
// 获取最新邮件
const emails = await this.connector.getLatestEmails(10, 1);
// 关键每次都重新连接以获取最新邮件QQ邮箱IMAP有延迟问题
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) {
logger.info('EmailVerification', `找到 ${emails.length} 封未读邮件`);
logger.info('EmailVerification', `找到 ${emails.length}邮件`);
// 3. 查找匹配的邮件并提取验证码
for (const email of emails.reverse()) { // 从最新的开始
logger.info('EmailVerification', `检查邮件: 发件人="${email.from}", 主题="${email.subject}"`);
// 打印最近5条邮件信息倒序最新的在前
const recentEmails = emails.slice(-5).reverse();
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) {
if (parser.canParse(email)) {
@ -82,7 +114,7 @@ class EmailVerificationService {
}
logger.warn('EmailVerification', `未找到匹配的Windsurf验证码邮件`);
} else {
logger.info('EmailVerification', `没有未读邮件`);
logger.info('EmailVerification', `没有邮件`);
}
// 等待一段时间后再检查