aaaaa
This commit is contained in:
parent
774a6c118a
commit
969f9cdb5d
@ -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;
|
||||
|
||||
@ -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', `没有邮件`);
|
||||
}
|
||||
|
||||
// 等待一段时间后再检查
|
||||
|
||||
Loading…
Reference in New Issue
Block a user