# t-online.de Claim Flow — детали реализации ## IMAP: baseline-based поиск новых писем Проблема: старый подход искал verification-письма по `FROM "tokenharbor"`, но не находил их, если письмо уже прочитано или ушло в архив. Решение: **baseline-based** — запоминаем текущие UID до клика «Verify email», затем ждём только новые UID. ```python # Get baseline UIDs status, baseline = mail.search(None, 'ALL') known_ids = set(baseline[0].split()) if baseline[0] else set() # Wait for new emails while time.time() - start < timeout: mail.select("INBOX") status, data = mail.search(None, 'ALL') new_ids = set(data[0].split()) - known_ids for mid in sorted(new_ids, reverse=True): # parse email, check for verify link ``` ## «Verify email» кнопка — отправка нового письма На дашборде TokenHarbor, если аккаунт не верифицирован, есть текст «Verify your email» и кнопка. Клик по ней отправляет новое verification-письмо. ```javascript for(var b of document.querySelectorAll('button')) { if((b.textContent.includes('Verify') && b.textContent.includes('email')) && b.offsetParent !== null) { b.click(); break; } } ``` ## $5 Gift Claim — двухшаговый 1. Клик по кнопке в хедере дашборда: «1 gift ready to claim» → открывает модалку 2. Клик по «Claim» внутри модалки ```javascript // Step 1: open modal for(var b of document.querySelectorAll('button')) { if((b.textContent.includes('Claim') || b.textContent.includes('Gift')) && b.offsetParent !== null) { b.click(); break; } } // Step 2: claim in modal for(var b of document.querySelectorAll('button')) { if(b.textContent.trim() === 'Claim' && b.offsetParent !== null) { b.click(); break; } } ``` ## Статистика успешности - ~85% аккаунтов уже верифицированы (из предыдущего раунда регистрации) - ~15% требуют отправки нового verification-письма - ~7-8% фейлов на этапе создания API ключа (race condition Next.js) - Общая скорость: ~1 акк/мин (логин → verify → $5 → ключ → пуш) ## Пароли - **TokenHarbor сайт**: `TokenHarbor2026!X` (единый для всех аккаунтов) - **IMAP t-online.de**: индивидуальные пароли из `working_mails.txt` (формат `email:password`) - Некоторые пароли в пуле устарели (~5-10%) — скрипт пропускает их с ошибкой «Invalid login»