Письма (tbank.mails)¶
Внутренняя переписка H2H (host-to-host): отправка входящих писем, отметка сообщений о прочтении и получение непрочитанных писем.
Хост:
secured-openapi.tbank.ru(mTLS,cert). Отправка входящего письма дополнительно подписывается (signature=HttpSignature(key_id, secret)); остальное — по Bearer.Клиенты:
tbank.mails.MailsClient(async) иtbank.mails.sync.MailsClient(sync).
from tbank.mails import MailsClient, HttpSignature
from tbank.mails.models import IncomingMailRequest, MarkReadRequest
client = MailsClient(
token="business-token",
cert=("client.pem", "client-key.pem"),
signature=HttpSignature("key-id", "secret"), # для входящих писем
)
# отправить входящее письмо (mTLS + подпись)
await client.push_incoming_mail(IncomingMailRequest(
external_id="EXT-1", theme_code="TAX", theme="Вопрос по НДС",
created_at="2026-06-01T10:00:00Z", text="Здравствуйте!",
))
# непрочитанные письма и отметка о прочтении
unread = await client.list_unread()
ids = [m.id for mail in unread for m in mail.messages if m.is_unread]
await client.mark_read(MarkReadRequest(messages_ids=ids))
Клиент¶
- class tbank.mails.aio.MailsClient(token, *, signature=None, base_url=None, sandbox=False, cert=None, verify=True, retry=None, transport=None)[исходный код]¶
Базовые классы:
BaseAsyncClientАсинхронный клиент внутренних писем (H2H): входящие письма, отметка о прочтении, непрочитанные письма.
Домен работает на secured-хосте (mTLS, cert). Отправка входящего письма дополнительно подписывается (signature — HttpSignature(keyId, secret)); остальные методы — по Bearer. Провод — camelCase.
- Параметры:
token (str)
signature (Optional[HttpSignature])
base_url (Optional[str])
sandbox (bool)
cert (Optional[CertTypes])
verify (VerifyTypes)
retry (Optional[RetryPolicy])
transport (Optional[AsyncTransport])
- async push_incoming_mail(request)[исходный код]¶
Отправить входящее письмо (mTLS + подпись).
- Параметры:
request (IncomingMailRequest)
- Тип результата:
- async mark_read(request)[исходный код]¶
Отметить сообщения как прочитанные.
- Параметры:
request (MarkReadRequest)
- Тип результата:
None
- async list_unread()[исходный код]¶
Непрочитанные письма со списком сообщений.
Модели¶
- class tbank.mails.models.MailModel[исходный код]¶
Базовые классы:
BaseModelБазовая модель домена: snake_case в Python, camelCase на проводе.
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.mails.models.IncomingMailRequest(*, externalId, themeCode, theme, createdAt, text=None, files=None)[исходный код]¶
Базовые классы:
MailModelВходящее письмо (H2H). Требуется text либо files.
- Параметры:
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.mails.models.IncomingMailResult(*, id)[исходный код]¶
Базовые классы:
MailModel- Параметры:
id (str)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.mails.models.MarkReadRequest(*, messagesIds)[исходный код]¶
Базовые классы:
MailModel- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.mails.models.MailMessage(*, id, mailId, isFromBank, isUnread, createdAt, text=None, files=None)[исходный код]¶
Базовые классы:
MailModel- Параметры:
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.mails.models.Mail(*, id, number, companyId, isFromBank, theme, themeCode, status, updatedAt, messages=<factory>, externalId=None)[исходный код]¶
Базовые классы:
MailModelПисьмо со списком сообщений.
- Параметры:
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].