> **Источник:** https://python-all.ru/3.1/library/smtpd.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 20.16. `smtpd` – SMTP-сервер

Этот модуль предоставляет несколько классов для реализации SMTP-серверов. Один из них – универсальная реализация, которая ничего не делает и может быть переопределена, а два других предлагают конкретные стратегии отправки почты.

## 20.16.1. Объекты SMTPServer

#### `class smtpd.SMTPServer(localaddr, remoteaddr)`

Создаёт новый объект [`SMTPServer`](https://python-all.ru/3.1/library/smtpd.html#smtpd.SMTPServer), который привязывается к локальному адресу *localaddr*. Он будет рассматривать *remoteaddr* как вышестоящий SMTP-ретранслятор. Он наследуется от [`asyncore.dispatcher`](https://python-all.ru/3.1/library/asyncore.html#asyncore.dispatcher) и, таким образом, при создании встраивается в цикл событий [`asyncore`](https://python-all.ru/3.1/library/asyncore.html#module-asyncore).

#### `process_message(peer, mailfrom, rcpttos, data)`

Вызывает исключение

[`NotImplementedError`](https://python-all.ru/3.1/library/exceptions.html#NotImplementedError)

. Переопределите этот метод в подклассах, чтобы выполнять с этим сообщением полезные действия. Всё, что было передано в конструктор как

*remoteaddr*

, будет доступно как

`_remoteaddr`

атрибут.

*peer*

– адрес удалённого хоста,

*mailfrom*

– отправитель конверта,

*rcpttos*

– получатели конверта, а

*data*

– строка с содержимым письма (должна быть в формате

[**RFC 2822**](https://python-all.ru/3.1/library/smtpd.html)

формат).

## 20.16.2. Объекты DebuggingServer

#### `class smtpd.DebuggingServer(localaddr, remoteaddr)`

Создаёт новый отладочный сервер. Аргументы такие же, как у

[`SMTPServer`](https://python-all.ru/3.1/library/smtpd.html#smtpd.SMTPServer)

. Сообщения будут отброшены и выведены в stdout.

## 20.16.3. Объекты PureProxy

#### `class smtpd.PureProxy(localaddr, remoteaddr)`

Создаёт новый чистый прокси-сервер. Аргументы такие же, как у

[`SMTPServer`](https://python-all.ru/3.1/library/smtpd.html#smtpd.SMTPServer)

. Всё будет ретранслироваться на

*remoteaddr*

. Имейте в виду, что запуск этого сервера может превратить вас в открытый ретранслятор, поэтому будьте осторожны.

## 20.16.4. Объекты MailmanProxy

#### `class smtpd.MailmanProxy(localaddr, remoteaddr)`

Создаёт новый чистый прокси-сервер. Аргументы такие же, как у

[`SMTPServer`](https://python-all.ru/3.1/library/smtpd.html#smtpd.SMTPServer)

. Всё будет ретранслироваться на

*remoteaddr*

, если только локальные настройки mailman не знают об адресе – в этом случае он будет обработан через mailman. Имейте в виду, что запуск этого сервера может превратить вас в открытый ретранслятор, поэтому будьте осторожны.
