138 lines
3.1 KiB
Python
138 lines
3.1 KiB
Python
from asyncio import TimeoutError
|
|
from typing import List
|
|
|
|
|
|
__all__ = (
|
|
"SMTPAuthenticationError",
|
|
"SMTPConnectError",
|
|
"SMTPDataError",
|
|
"SMTPException",
|
|
"SMTPHeloError",
|
|
"SMTPNotSupported",
|
|
"SMTPRecipientRefused",
|
|
"SMTPRecipientsRefused",
|
|
"SMTPResponseException",
|
|
"SMTPSenderRefused",
|
|
"SMTPServerDisconnected",
|
|
"SMTPTimeoutError",
|
|
"SMTPConnectTimeoutError",
|
|
"SMTPReadTimeoutError",
|
|
"SMTPConnectResponseError",
|
|
)
|
|
|
|
|
|
class SMTPException(Exception):
|
|
"""
|
|
Base class for all SMTP exceptions.
|
|
"""
|
|
|
|
def __init__(self, message: str, /) -> None:
|
|
self.message = message
|
|
self.args = (message,)
|
|
|
|
|
|
class SMTPServerDisconnected(SMTPException, ConnectionError):
|
|
"""
|
|
The connection was lost unexpectedly, or a command was run that requires
|
|
a connection.
|
|
"""
|
|
|
|
|
|
class SMTPConnectError(SMTPException, ConnectionError):
|
|
"""
|
|
An error occurred while connecting to the SMTP server.
|
|
"""
|
|
|
|
|
|
class SMTPTimeoutError(SMTPException, TimeoutError):
|
|
"""
|
|
A timeout occurred while performing a network operation.
|
|
"""
|
|
|
|
|
|
class SMTPConnectTimeoutError(SMTPTimeoutError, SMTPConnectError):
|
|
"""
|
|
A timeout occurred while connecting to the SMTP server.
|
|
"""
|
|
|
|
|
|
class SMTPReadTimeoutError(SMTPTimeoutError):
|
|
"""
|
|
A timeout occurred while waiting for a response from the SMTP server.
|
|
"""
|
|
|
|
|
|
class SMTPNotSupported(SMTPException):
|
|
"""
|
|
A command or argument sent to the SMTP server is not supported.
|
|
"""
|
|
|
|
|
|
class SMTPResponseException(SMTPException):
|
|
"""
|
|
Base class for all server responses with error codes.
|
|
"""
|
|
|
|
def __init__(self, code: int, message: str, /) -> None:
|
|
self.code = code
|
|
self.message = message
|
|
self.args = (code, message)
|
|
|
|
|
|
class SMTPConnectResponseError(SMTPResponseException, SMTPConnectError):
|
|
"""
|
|
The SMTP server returned an invalid response code after connecting.
|
|
"""
|
|
|
|
|
|
class SMTPHeloError(SMTPResponseException):
|
|
"""
|
|
Server refused HELO or EHLO.
|
|
"""
|
|
|
|
|
|
class SMTPDataError(SMTPResponseException):
|
|
"""
|
|
Server refused DATA content.
|
|
"""
|
|
|
|
|
|
class SMTPAuthenticationError(SMTPResponseException):
|
|
"""
|
|
Server refused our AUTH request; may be caused by invalid credentials.
|
|
"""
|
|
|
|
|
|
class SMTPSenderRefused(SMTPResponseException):
|
|
"""
|
|
SMTP server refused the message sender.
|
|
"""
|
|
|
|
def __init__(self, code: int, message: str, sender: str, /) -> None:
|
|
self.code = code
|
|
self.message = message
|
|
self.sender = sender
|
|
self.args = (code, message, sender)
|
|
|
|
|
|
class SMTPRecipientRefused(SMTPResponseException):
|
|
"""
|
|
SMTP server refused a message recipient.
|
|
"""
|
|
|
|
def __init__(self, code: int, message: str, recipient: str, /) -> None:
|
|
self.code = code
|
|
self.message = message
|
|
self.recipient = recipient
|
|
self.args = (code, message, recipient)
|
|
|
|
|
|
class SMTPRecipientsRefused(SMTPException):
|
|
"""
|
|
SMTP server refused multiple recipients.
|
|
"""
|
|
|
|
def __init__(self, recipients: List[SMTPRecipientRefused], /) -> None:
|
|
self.recipients = recipients
|
|
self.args = (recipients,)
|