try to optimaze mail read
This commit is contained in:
@@ -33,6 +33,8 @@ import socks
|
||||
from dotenv import load_dotenv
|
||||
from imapclient import IMAPClient
|
||||
|
||||
from src.mail.imap_fingerprint import get_fingerprint_for_provider, send_imap_id
|
||||
|
||||
load_dotenv()
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
@@ -221,6 +223,8 @@ class ProxyIMAPClient(IMAPClient):
|
||||
Accessibles via ``client.subjects``.
|
||||
Utilisés par ``search_by_subjects()`` pour construire
|
||||
automatiquement les critères IMAP SUBJECT.
|
||||
fingerprint : ImapFingerprint, optional
|
||||
IMAP 客户端指纹伪装(自动根据邮箱地址选择)。
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
@@ -228,11 +232,12 @@ class ProxyIMAPClient(IMAPClient):
|
||||
host: str,
|
||||
proxy: ProxyConfig,
|
||||
subjects: Optional[List[str]] = None,
|
||||
fingerprint=None,
|
||||
**kwargs,
|
||||
):
|
||||
self._proxy = proxy
|
||||
# Sujets à rechercher, injectables depuis l'extérieur
|
||||
self.subjects: List[str] = list(subjects) if subjects else []
|
||||
self._fingerprint = fingerprint
|
||||
super().__init__(host, **kwargs)
|
||||
|
||||
def _create_IMAP4(self):
|
||||
@@ -382,9 +387,13 @@ class ProxyMailReader:
|
||||
|
||||
# ── Connexion ────────────────────────────────────────────
|
||||
|
||||
def _connect(self) -> ProxyIMAPClient:
|
||||
def _connect(self, login_email: str = None) -> ProxyIMAPClient:
|
||||
imap_server = get_imap_server(self.account.login)
|
||||
last_exc: Optional[Exception] = None
|
||||
|
||||
fingerprint = None
|
||||
if login_email:
|
||||
fingerprint = get_fingerprint_for_provider(login_email)
|
||||
|
||||
for attempt in range(1, self.max_retries + 1):
|
||||
logger.info(
|
||||
@@ -397,11 +406,16 @@ class ProxyMailReader:
|
||||
host=imap_server,
|
||||
proxy=self.proxy,
|
||||
subjects=self._subjects,
|
||||
fingerprint=fingerprint,
|
||||
use_uid=True,
|
||||
ssl=True,
|
||||
timeout=self.timeout,
|
||||
)
|
||||
client.login(self.account.login, self.account.password)
|
||||
|
||||
if fingerprint:
|
||||
send_imap_id(client, fingerprint)
|
||||
|
||||
logger.info(
|
||||
"[%s] Connecté (tentative %d). Sujets recherchés : %s",
|
||||
self.account.login, attempt, self._subjects,
|
||||
@@ -531,8 +545,8 @@ class ProxyMailReader:
|
||||
]
|
||||
|
||||
all_results: List[MailResult] = []
|
||||
seen_message_ids: set = set() # déduplication inter-dossiers
|
||||
client = self._connect()
|
||||
seen_message_ids: set = set()
|
||||
client = self._connect(login_email=self.account.login)
|
||||
|
||||
try:
|
||||
folders = self._list_folders(client)
|
||||
|
||||
Reference in New Issue
Block a user