smtplib: Improve bytes handling (#9094)

This commit is contained in:
Jelle Zijlstra
2022-11-04 20:08:10 -07:00
committed by GitHub
parent 9f0d0b9af7
commit 7ef7029f88

View File

@@ -1,5 +1,5 @@
import sys
from _typeshed import Self
from _typeshed import ReadableBuffer, Self, _BufferWithLen
from collections.abc import Sequence
from email.message import Message as _Message
from re import Pattern
@@ -9,6 +9,8 @@ from types import TracebackType
from typing import Any, Protocol, overload
from typing_extensions import TypeAlias
from _socket import _Address as _SourceAddress
__all__ = [
"SMTPException",
"SMTPServerDisconnected",
@@ -28,8 +30,6 @@ __all__ = [
_Reply: TypeAlias = tuple[int, bytes]
_SendErrs: TypeAlias = dict[str, _Reply]
# Should match source_address for socket.create_connection
_SourceAddress: TypeAlias = tuple[bytearray | bytes | str, int]
SMTP_PORT: int
SMTP_SSL_PORT: int
@@ -102,7 +102,7 @@ class SMTP:
) -> None: ...
def set_debuglevel(self, debuglevel: int) -> None: ...
def connect(self, host: str = ..., port: int = ..., source_address: _SourceAddress | None = ...) -> _Reply: ...
def send(self, s: bytes | str) -> None: ...
def send(self, s: ReadableBuffer | str) -> None: ...
def putcmd(self, cmd: str, args: str = ...) -> None: ...
def getreply(self) -> _Reply: ...
def docmd(self, cmd: str, args: str = ...) -> _Reply: ...
@@ -114,7 +114,7 @@ class SMTP:
def noop(self) -> _Reply: ...
def mail(self, sender: str, options: Sequence[str] = ...) -> _Reply: ...
def rcpt(self, recip: str, options: Sequence[str] = ...) -> _Reply: ...
def data(self, msg: bytes | str) -> _Reply: ...
def data(self, msg: ReadableBuffer | str) -> _Reply: ...
def verify(self, address: str) -> _Reply: ...
vrfy = verify
def expn(self, address: str) -> _Reply: ...
@@ -125,16 +125,16 @@ class SMTP:
@overload
def auth_cram_md5(self, challenge: None = ...) -> None: ...
@overload
def auth_cram_md5(self, challenge: bytes) -> str: ...
def auth_plain(self, challenge: bytes | None = ...) -> str: ...
def auth_login(self, challenge: bytes | None = ...) -> str: ...
def auth_cram_md5(self, challenge: ReadableBuffer) -> str: ...
def auth_plain(self, challenge: ReadableBuffer | None = ...) -> str: ...
def auth_login(self, challenge: ReadableBuffer | None = ...) -> str: ...
def login(self, user: str, password: str, *, initial_response_ok: bool = ...) -> _Reply: ...
def starttls(self, keyfile: str | None = ..., certfile: str | None = ..., context: SSLContext | None = ...) -> _Reply: ...
def sendmail(
self,
from_addr: str,
to_addrs: str | Sequence[str],
msg: bytes | str,
msg: _BufferWithLen | str,
mail_options: Sequence[str] = ...,
rcpt_options: Sequence[str] = ...,
) -> _SendErrs: ...