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

Черновики

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

Все методы

drafts.rb
page = client.drafts.list(query: "invoice", limit: 25)draft = client.drafts.get("draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8")puts page.items.size, draft[:subject] created = client.drafts.create(  to: ["[email protected]"],  cc: [],  bcc: [],  subject: "Your September invoice",  html: "<p>Draft body.</p>",  from: "[email protected]",  threadId: "CAHk7pQ2x9LmZ4-mail.example.com") updated = client.drafts.update(created[:id], subject: "Revised")client.drafts.delete(updated[:id])

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

Поля черновика являются именованными аргументами с именами из API, поэтому цепочка, на которую отвечает черновик, задаётся как threadId:. Их также можно передать одним Hash. Черновик возвращается как Hash с ключами типа Symbol, поэтому draft[:subject] читает тему. Каждая запись отвечает только object и id, поэтому весь черновик читайте через get.

list листает так же, как threads.list. pageToken из API возвращается как next_cursor и передаётся как cursor:, а list_all и iterate следуют за ним за вас. iterate передаёт каждый черновик в блок или без блока возвращает Enumerator. Страница содержит 25 черновиков, если limit: не запросит до 100. query: принимает синтаксис поиска threads.list, и поиск никогда не выходит за пределы черновиков. Строка содержит только object и id, поэтому за получателями, темой и телом вызывайте get.

Список черновиков не сообщает hasMore, поэтому has_more? истинно всякий раз, когда вернулся курсор. Сервер предлагает курсор всякий раз, когда страница заполнена, поэтому за последней страницей, которая оказалась заполненной, следует одна пустая.

Черновик хранится как цепочка с ярлыком DRAFT, поэтому client.threads.list(folder: "draft") выводит те же черновики. get, update и delete отвечают на идентификатор обычной цепочки ошибкой 404, хотя threads.get его открывает. delete удаляет черновик навсегда. Он не попадает в корзину, и отменить это нельзя.

Чтобы отправить черновик, передайте его идентификатор в emails.send как draftId:. Черновик даёт содержимое, а отправка даёт конверт. Черновик нельзя сочетать с template или translate.

send_draft.rb
client.emails.send(  from: "[email protected]",  to: "[email protected]",  draftId: "draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8")

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

toArray<String>
Адреса получателей в виде Array из String, а не в формах Hash, которые принимает `emails.send`, потому что этот эндпоинт склеивает Array в список через запятую, который нужен драйверу. String может содержать отображаемое имя, как в `Ada Lovelace <[email protected]>`, но имя с запятой распадётся на двух испорченных получателей. В отличие от `emails.send`, здесь гем не оборачивает одиночную String в Array, поэтому передавайте `["[email protected]"]`. При создании пропущенный Array сохраняется пустым. При обновлении пропущенное поле не трогает сохранённых получателей, поскольку обработчик сначала читает черновик и объединяет данные.
ccArray<String>
Адреса Cc в той же форме, что и `to`. Если не указаны, при создании пусты, а при обновлении не меняются.
bccArray<String>
Адреса Bcc в той же форме, что и `to`. Если не указаны, при создании пусты, а при обновлении не меняются.
subjectString
Тема черновика, не более 998 символов, предел строки по RFC 5322. При создании по умолчанию пустая String, а пустая тема сохраняется как `(no subject)`, поэтому у черновика тема есть всегда.
htmlString
Тело черновика в виде разметки, не более 1 000 000 символов. Побеждает именно это тело. `html` и `text` идут в единственное поле сообщения драйвера, поэтому при отправке обоих сохраняется это.
textString
Текстовое тело, не более 1 000 000 символов, используется только при отсутствии `html`. Черновик хранит одно тело, а не две части, поэтому переданный здесь текст при чтении черновика возвращается без преобразования в `html`.
fromString
Адрес отправителя для сохранения в черновике, с отображаемым именем или без него. Если не указан при создании, у черновика нет отправителя. При обновлении, если он не указан, переносится из сохранённого черновика. Драйвер собирает всё сообщение заново из того, что ему передано, поэтому частичное изменение без этого поля молча сменило бы выбранного отправителя. Пустая String или nil при обновлении очищает его.
threadIdString
Привязать черновик к существующей цепочке, чтобы он сохранился как ответ. Как и `from`, при обновлении, если не указан, переносится из сохранённого черновика, потому что пересборка сообщения без него оторвала бы ответ от цепочки. Пустая String при обновлении отвязывает его. Черновик всё равно хранится как отдельная цепочка со своим идентификатором, поэтому он выводится среди черновиков, а не внутри цепочки, на которую отвечает.

Чтобы сохранить поле, не указывайте его. Передать nil не то же самое. Гем отправляет nil, и каждое поле отклоняет его с 422 invalid_parameter, кроме from при обновлении, где nil очищает отправителя. Вызовите compact на Hash необязательных значений перед передачей. Тело запроса тоже строгое. Поле вне этих восьми отклоняется так же, а поля для вложений нет.

Ответ: черновик (drafts.get)

objectString
Всегда `draft`.
idString
Идентификатор черновика: `draft-` и UUID. Записи отвечают только `object` и `id`, а не всем черновиком, поэтому берите идентификатор из результата, а не используйте повторно тот, что отправили.
toArray<String>
Адреса получателей в том виде, в каком их сохранил черновик: голые, без отображаемых имён. Пустой Array, а не nil, если получателей нет.
ccArray<String>
Адреса Cc в сохранённом виде. Пустой Array, а не nil, если их нет.
bccArray<String>
Адреса Bcc в сохранённом виде. Пустой Array, а не nil, если их нет.
subjectString
Сохранённая тема, никогда не nil. У черновика, сохранённого без темы, она равна `(no subject)`, заглушке, которую хранит почтовый ящик, поэтому сравнивайте с ней, а не проверяйте на пустую String.
htmlString
Сохранённое тело или пустая String, если тела нет. Отдельного текстового поля в ответе нет, поэтому черновик, сохранённый только с `text`, возвращается здесь.
fromString or nil
Адрес, с которым был сохранён черновик. Сообщается, только пока рабочее пространство ещё может отправлять от его имени. nil у черновика, сохранённого без отправителя или с адресом, которого с тех пор не стало.
threadIdString or nil
Цепочка, на которую отвечает черновик, или nil для черновика, который начинает новую переписку.
attachmentsArray<Hash>
Каждая запись содержит только `filename` и `contentType`, потому что вложения черновиков хранятся как имена и типы без содержимого. `update` очищает этот список.