base_mailbox.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. """Mailbox abstractions for zhuce6."""
  2. from __future__ import annotations
  3. from abc import ABC, abstractmethod
  4. from dataclasses import dataclass, field
  5. from typing import Any
  6. @dataclass
  7. class MailboxAccount:
  8. email: str
  9. account_id: str = ""
  10. extra: dict[str, Any] = field(default_factory=dict)
  11. class BaseMailbox(ABC):
  12. @abstractmethod
  13. def get_email(self) -> MailboxAccount:
  14. """Create or reserve an email inbox."""
  15. @abstractmethod
  16. def wait_for_code(
  17. self,
  18. account: MailboxAccount,
  19. keyword: str = "",
  20. timeout: int = 120,
  21. before_ids: set[str] | None = None,
  22. ) -> str:
  23. """Poll for a 6-digit verification code."""
  24. @abstractmethod
  25. def get_current_ids(self, account: MailboxAccount) -> set[str]:
  26. """Return the currently visible message ids."""
  27. def create_mailbox(
  28. provider: str,
  29. proxy: str | None = None,
  30. *,
  31. profile_name: str = "auto",
  32. ) -> BaseMailbox:
  33. provider_key = str(provider or "").strip().lower()
  34. if provider_key != "cfmail":
  35. raise ValueError(f"Unsupported mailbox provider: {provider}")
  36. from .cfmail import CfMailMailbox
  37. return CfMailMailbox(proxy=proxy, profile_name=profile_name)