diff --git a/unipay/providers/transfer.py b/unipay/providers/transfer.py index caaee52..14f4d45 100644 --- a/unipay/providers/transfer.py +++ b/unipay/providers/transfer.py @@ -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', '?')