Fresh start - excluded large ROM JSON files
This commit is contained in:
83
tools/proton_imap_simple.py
Normal file
83
tools/proton_imap_simple.py
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Simple Proton Mail Bridge IMAP test - clean version"""
|
||||
|
||||
import socket
|
||||
|
||||
IMAP_HOST = "127.0.0.1"
|
||||
IMAP_PORT = 1143
|
||||
USERNAME = "alexthenerdyai@proton.me"
|
||||
PASSWORD = "Is413#dfslw@alex"
|
||||
|
||||
def get_response(sock, tag):
|
||||
"""Read response until we see our tag"""
|
||||
response = b""
|
||||
while True:
|
||||
chunk = sock.recv(4096)
|
||||
if not chunk:
|
||||
break
|
||||
response += chunk
|
||||
if tag.encode() in response:
|
||||
break
|
||||
return response.decode()
|
||||
|
||||
def main():
|
||||
print("=" * 50)
|
||||
print("Proton Mail Bridge - IMAP Test")
|
||||
print("=" * 50)
|
||||
|
||||
# Connect
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.settimeout(10)
|
||||
sock.connect((IMAP_HOST, IMAP_PORT))
|
||||
|
||||
# Greeting
|
||||
greeting = sock.recv(1024).decode()
|
||||
print(f"\n[CONNECT] {greeting.strip()[:80]}...")
|
||||
|
||||
# Login
|
||||
sock.send(f'A1 LOGIN "{USERNAME}" "{PASSWORD}"\r\n'.encode())
|
||||
resp = get_response(sock, "A1 OK")
|
||||
print("[LOGIN] Success!")
|
||||
|
||||
# List folders with LSUB
|
||||
sock.send(b'A2 LSUB "" "*"\r\n')
|
||||
resp = get_response(sock, "A2 OK")
|
||||
print("\n[FOLDERS]")
|
||||
folders = []
|
||||
for line in resp.split('\r\n'):
|
||||
if 'LSUB' in line and '/' in line:
|
||||
folder = line.split('"/"')[-1].strip().strip('"')
|
||||
folders.append(folder)
|
||||
print(f" - {folder}")
|
||||
|
||||
# Check INBOX
|
||||
sock.send(b'A3 EXAMINE "INBOX"\r\n')
|
||||
resp = get_response(sock, "A3 OK")
|
||||
|
||||
# Count messages
|
||||
exists = 0
|
||||
for line in resp.split('\r\n'):
|
||||
if 'EXISTS' in line:
|
||||
exists = int(line.split()[1])
|
||||
break
|
||||
print(f"\n[INBOX] {exists} total messages")
|
||||
|
||||
# Check unread
|
||||
sock.send(b'A4 SEARCH UNSEEN\r\n')
|
||||
resp = get_response(sock, "A4 OK")
|
||||
unseen_count = 0
|
||||
for line in resp.split('\r\n'):
|
||||
if 'SEARCH' in line and '*' in line:
|
||||
parts = line.split('SEARCH')
|
||||
if len(parts) > 1:
|
||||
unseen = parts[1].strip().split()
|
||||
unseen_count = len(unseen) if unseen and unseen[0] else 0
|
||||
print(f"[INBOX] {unseen_count} unread messages")
|
||||
|
||||
# Logout
|
||||
sock.send(b'A5 LOGOUT\r\n')
|
||||
print("\n[LOGOUT] Done!")
|
||||
sock.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user