Перейти к документации
Python

Черновики

`drafts.list`, `list_all`, `iterate`, `get`, `create`, `update` и `delete`.

Все методы

usage.py
from openemail import openemail page = openemail.drafts.list(query='invoice', limit=25)draft = openemail.drafts.get('draft_…') created = openemail.drafts.create({    'to': ['[email protected]'],    'cc': [],    'bcc': [],    'subject': 'Your September invoice',    'html': '<p>Draft body.</p>',    'from': '[email protected]',    'threadId': 'thread_…',}) draft_id = created['id'] if draft_id is not None:    openemail.drafts.update(draft_id, {'subject': 'Revised'})    openemail.drafts.delete(draft_id)

update сохраняет идентификатор черновика, так что возвращаемое значение всегда то, что вы передали. Неизвестный идентификатор даёт 404, а не новый черновик.

list работает постранично так же, как threads.list: pageToken от API приходит как nextCursor и уходит как cursor, а list_all и iterate следуют за ним за вас.

Чтобы отправить черновик, передайте его идентификатор в emails.send. Черновик даёт содержимое, а отправка даёт конверт.

send_draft.py
from openemail import openemail openemail.emails.send({    'from': '[email protected]',    'to': '[email protected]',    'draftId': 'draft_…',})

Параметры: drafts.create и drafts.update (DraftInput)

tolist[str]
Адреса получателей обычными строками, а не в формах `RecipientInput`, которые принимает `emails.send`, потому что этот эндпоинт склеивает массив в список через запятую, нужный драйверу. При создании опущенный массив сохраняется пустым; при обновлении опущенное поле оставляет сохранённых получателей нетронутыми, поскольку обработчик сначала читает черновик и сливает данные.
cclist[str]
Адреса копии, в той же форме обычных строк, что и `to`. Пусто при создании, если опущено, и нетронуто при обновлении, если опущено.
bcclist[str]
Адреса скрытой копии, в той же форме обычных строк, что и `to`. Пусто при создании, если опущено, и нетронуто при обновлении, если опущено.
subjectstr
Тема черновика, не длиннее 998 символов (предел строки по RFC 5322). При создании по умолчанию пустая строка, так что тема у черновика есть всегда.
htmlstr
Тело черновика как разметка, не длиннее 1 000 000 символов. Побеждает именно это тело: `html` и `text` питают единственное поле сообщения у драйвера, так что при передаче обоих сохраняется это.
textstr
Текстовое тело, не длиннее 1 000 000 символов, используется только при отсутствии `html`. Черновик хранит одно тело, а не две части, так что переданный здесь текст возвращается в `html` при чтении черновика.
fromstr
Адрес отправителя, сохраняемый в черновике. При обновлении он переносится из сохранённого черновика, если опущен. Драйвер пересобирает всё сообщение из того, что ему передали, так что частичная правка, потерявшая это поле, молча изменила бы выбранного отправителя.
threadIdstr
Привязать черновик к существующей цепочке, чтобы он сохранился как ответ. Как и `from`, при обновлении переносится, если опущен, потому что пересборка сообщения без него отвязала бы ответ от цепочки.

Ответ: DraftResource (drafts.get)

objectLiteral['draft']
Всегда `draft`.
idstr
Идентификатор черновика. Записи отвечают `SavedDraftResource`, а не целым черновиком, так что читайте идентификатор из результата, а не переиспользуйте отправленный.
tolist[str]
Адреса получателей в том виде, в каком их сохранил черновик. Пустой список, никогда не `None`, когда их нет.
cclist[str]
Адреса копии как сохранены. Пустой список, никогда не `None`, когда их нет.
bcclist[str]
Адреса скрытой копии как сохранены. Пустой список, никогда не `None`, когда их нет.
subjectstr
Сохранённая тема или пустая строка, когда темы у черновика нет. Это поле никогда не бывает `None`, так что проверяйте его длину, а не наличие.
htmlstr
Сохранённое тело или пустая строка, когда тела у черновика нет. Отдельного текстового поля на выходе нет: черновик, сохранённый с одним лишь `text`, возвращается здесь.

Справочник