1from email.charset import Charset
2from email.contentmanager import ContentManager
3from email.errors import MessageDefect
4from email.policy import Policy
5from typing import Any, Generator, Iterator, List, Optional, Sequence, Tuple, TypeVar, Union
6
7_T = TypeVar("_T")
8
9_PayloadType = Union[List[Message], str, bytes]
10_CharsetType = Union[Charset, str, None]
11_ParamsType = Union[str, None, Tuple[str, Optional[str], str]]
12_ParamType = Union[str, Tuple[Optional[str], Optional[str], str]]
13_HeaderType = Any
14
15class Message:
16    policy: Policy  # undocumented
17    preamble: Optional[str]
18    epilogue: Optional[str]
19    defects: List[MessageDefect]
20    def __str__(self) -> str: ...
21    def is_multipart(self) -> bool: ...
22    def set_unixfrom(self, unixfrom: str) -> None: ...
23    def get_unixfrom(self) -> Optional[str]: ...
24    def attach(self, payload: Message) -> None: ...
25    def get_payload(self, i: Optional[int] = ..., decode: bool = ...) -> Any: ...  # returns Optional[_PayloadType]
26    def set_payload(self, payload: _PayloadType, charset: _CharsetType = ...) -> None: ...
27    def set_charset(self, charset: _CharsetType) -> None: ...
28    def get_charset(self) -> _CharsetType: ...
29    def __len__(self) -> int: ...
30    def __contains__(self, name: str) -> bool: ...
31    def __getitem__(self, name: str) -> _HeaderType: ...
32    def __setitem__(self, name: str, val: _HeaderType) -> None: ...
33    def __delitem__(self, name: str) -> None: ...
34    def keys(self) -> List[str]: ...
35    def values(self) -> List[_HeaderType]: ...
36    def items(self) -> List[Tuple[str, _HeaderType]]: ...
37    def get(self, name: str, failobj: _T = ...) -> Union[_HeaderType, _T]: ...
38    def get_all(self, name: str, failobj: _T = ...) -> Union[List[_HeaderType], _T]: ...
39    def add_header(self, _name: str, _value: str, **_params: _ParamsType) -> None: ...
40    def replace_header(self, _name: str, _value: _HeaderType) -> None: ...
41    def get_content_type(self) -> str: ...
42    def get_content_maintype(self) -> str: ...
43    def get_content_subtype(self) -> str: ...
44    def get_default_type(self) -> str: ...
45    def set_default_type(self, ctype: str) -> None: ...
46    def get_params(self, failobj: _T = ..., header: str = ..., unquote: bool = ...) -> Union[List[Tuple[str, str]], _T]: ...
47    def get_param(self, param: str, failobj: _T = ..., header: str = ..., unquote: bool = ...) -> Union[_T, _ParamType]: ...
48    def del_param(self, param: str, header: str = ..., requote: bool = ...) -> None: ...
49    def set_type(self, type: str, header: str = ..., requote: bool = ...) -> None: ...
50    def get_filename(self, failobj: _T = ...) -> Union[_T, str]: ...
51    def get_boundary(self, failobj: _T = ...) -> Union[_T, str]: ...
52    def set_boundary(self, boundary: str) -> None: ...
53    def get_content_charset(self, failobj: _T = ...) -> Union[_T, str]: ...
54    def get_charsets(self, failobj: _T = ...) -> Union[_T, List[str]]: ...
55    def walk(self) -> Generator[Message, None, None]: ...
56    def get_content_disposition(self) -> Optional[str]: ...
57    def as_string(self, unixfrom: bool = ..., maxheaderlen: int = ..., policy: Optional[Policy] = ...) -> str: ...
58    def as_bytes(self, unixfrom: bool = ..., policy: Optional[Policy] = ...) -> bytes: ...
59    def __bytes__(self) -> bytes: ...
60    def set_param(
61        self,
62        param: str,
63        value: str,
64        header: str = ...,
65        requote: bool = ...,
66        charset: Optional[str] = ...,
67        language: str = ...,
68        replace: bool = ...,
69    ) -> None: ...
70    def __init__(self, policy: Policy = ...) -> None: ...
71
72class MIMEPart(Message):
73    def __init__(self, policy: Optional[Policy] = ...) -> None: ...
74    def get_body(self, preferencelist: Sequence[str] = ...) -> Optional[Message]: ...
75    def iter_attachments(self) -> Iterator[Message]: ...
76    def iter_parts(self) -> Iterator[Message]: ...
77    def get_content(self, *args: Any, content_manager: Optional[ContentManager] = ..., **kw: Any) -> Any: ...
78    def set_content(self, *args: Any, content_manager: Optional[ContentManager] = ..., **kw: Any) -> None: ...
79    def make_related(self, boundary: Optional[str] = ...) -> None: ...
80    def make_alternative(self, boundary: Optional[str] = ...) -> None: ...
81    def make_mixed(self, boundary: Optional[str] = ...) -> None: ...
82    def add_related(self, *args: Any, content_manager: Optional[ContentManager] = ..., **kw: Any) -> None: ...
83    def add_alternative(self, *args: Any, content_manager: Optional[ContentManager] = ..., **kw: Any) -> None: ...
84    def add_attachment(self, *args: Any, content_manager: Optional[ContentManager] = ..., **kw: Any) -> None: ...
85    def clear(self) -> None: ...
86    def clear_content(self) -> None: ...
87    def as_string(self, unixfrom: bool = ..., maxheaderlen: Optional[int] = ..., policy: Optional[Policy] = ...) -> str: ...
88    def is_attachment(self) -> bool: ...
89
90class EmailMessage(MIMEPart): ...
91