fix(transfer): enable background polling (remove return), add 2-day date filter to both run and check_transfer

This commit is contained in:
yumoqing 2026-07-17 14:17:16 +08:00
parent 7247cd518a
commit e70110e520

View File

@ -154,20 +154,33 @@ class TransferGateway(Gateway):
async def run(self, app):
"""后台轮询邮箱,匹配转账码并完成充值入账"""
debug(f'mail check loop will starting')
from datetime import datetime, timedelta
from email.utils import parsedate_to_datetime
debug('mail check loop starting')
self.running = True
return
while self.running:
debug(f'mail check loop running')
debug('mail check loop running')
try:
ec = EmailClient(self.pop3server, self.email, self.password)
count, _ = ec.stat()
if count == 0:
await asyncio.sleep(30)
continue
cutoff = datetime.now() - timedelta(days=2)
for i in range(count, 0, -1):
try:
mail = ec.get_mail(i)
mail_date_str = getattr(mail, 'date', None)
if mail_date_str:
try:
mail_date = parsedate_to_datetime(mail_date_str)
if mail_date < cutoff:
continue
except:
continue
else:
continue
if mail.mailfrom != '95555@message.cmbchina.com':
debug(f'ignored mail from {mail.mailfrom=}')
continue
@ -258,10 +271,13 @@ class TransferGateway(Gateway):
mail_date = parsedate_to_datetime(mail_date_str)
if mail_date < cutoff:
skip_date = True
except:
pass
except Exception as de:
debug('mail[' + idx + '] date parse error: ' + str(mail_date_str) + ' -> ' + str(de))
else:
debug('mail[' + idx + '] no date header, skipping date filter')
skip_date = True # 没有日期头的邮件跳过
if skip_date:
debug('mail[' + idx + '] date=' + str(mail_date_str) + ' older than 2 days, skip')
debug('mail[' + idx + '] date=' + str(mail_date_str) + ' older than 2 days or no date, skip')
continue
from_addr = getattr(mail, 'mailfrom', '?')