임시 보관함
`drafts.list`, `list_all`, `iterate`, `get`, `create`, `update`, `delete`.
모든 메서드
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는 초안의 id를 유지하므로, 응답에 담긴 값은 항상 전달한 것과 같습니다. 알 수 없는 id는 새 초안이 아니라 OpenEmail::NotFoundError로 발생하는 404입니다.
초안의 필드는 API의 이름을 쓰는 키워드 인자이므로, 초안이 답장하는 스레드는 threadId:입니다. Hash 하나로 전달할 수도 있습니다. 초안은 Symbol 키를 가진 Hash로 돌아오므로 draft[:subject]로 제목을 읽습니다. 모든 쓰기는 object와 id만으로 응답하므로, 초안 전체는 get으로 읽으세요.
list는 threads.list와 같은 방식으로 페이지를 나눕니다. API의 pageToken은 next_cursor로 돌아오고 cursor:로 들어가며, list_all과 iterate가 대신 따라갑니다. iterate는 각 초안을 블록에 yield하거나, 블록이 없으면 Enumerator를 반환합니다. 한 페이지에는 초안 25개가 담기며, limit:으로 최대 100개까지 요청할 수 있습니다. query:는 threads.list의 검색 구문을 받으며, 검색은 초안 밖으로 나가지 않습니다. 행은 object와 id뿐이므로, 수신자, 제목, 본문은 get을 호출해 가져오세요.
초안 목록은 hasMore를 알려 주지 않으므로, 커서가 돌아올 때마다 has_more?가 true입니다. 서버는 페이지가 가득 찰 때마다 커서를 주므로, 마침 가득 찬 마지막 페이지 뒤에는 빈 페이지가 하나 이어집니다.
초안은 DRAFT 라벨이 붙은 스레드로 저장되며, 그래서 client.threads.list(folder: "draft")도 같은 초안을 나열합니다. 일반 스레드 id는 threads.get으로는 열리지만 get, update, delete에서는 404가 돌아옵니다. delete는 초안을 영구히 삭제합니다. 휴지통으로 가지 않으며 되돌릴 수도 없습니다.
초안을 보내려면 그 id를 draftId:로 emails.send에 전달하세요. 초안이 내용을 제공하고 발송이 봉투를 제공합니다. 초안은 template이나 translate와 함께 쓸 수 없습니다.
client.emails.send( from: "[email protected]", to: "[email protected]", draftId: "draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8")매개변수: drafts.create 및 drafts.update
toArray<String>- 수신자 주소를 String의 Array로 담습니다. `emails.send`가 받는 Hash 형태가 아닌데, 이 엔드포인트는 Array를 드라이버가 원하는 쉼표 구분 목록으로 합치기 때문입니다. String에는 `Ada Lovelace <[email protected]>`처럼 표시 이름을 넣을 수 있지만, 쉼표가 들어간 이름은 망가진 수신자 둘로 쪼개집니다. `emails.send`와 달리 여기서는 gem이 단독 String을 Array로 감싸지 않으므로, `["[email protected]"]`처럼 전달하세요. 생성 시 Array를 생략하면 빈 값으로 저장됩니다. 수정 시 필드를 생략하면 저장된 수신자가 그대로 유지되는데, 핸들러가 초안을 먼저 읽고 병합하기 때문입니다.
ccArray<String>- `to`와 같은 형태의 Cc 주소입니다. 생성 시 생략하면 비어 있고, 수정 시 생략하면 그대로 유지됩니다.
bccArray<String>- `to`와 같은 형태의 Bcc 주소입니다. 생성 시 생략하면 비어 있고, 수정 시 생략하면 그대로 유지됩니다.
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을 주면 떼어 냅니다. 초안은 여전히 자체 id를 가진 별도의 스레드로 저장되므로, 답장하는 스레드 안이 아니라 초안들과 함께 나열됩니다.
값을 유지하려면 필드를 생략하세요. nil을 전달하는 것은 같지 않습니다. gem은 nil을 그대로 보내며, 수정 시의 from(nil이면 발신자를 지웁니다)을 제외한 모든 필드가 이를 422 invalid_parameter로 거부합니다. 선택적인 값을 담은 Hash는 전달하기 전에 compact를 호출하세요. 본문도 엄격합니다. 이 여덟 개 외의 필드도 같은 방식으로 거부되며, 첨부 파일용 필드는 없습니다.
응답: 초안(drafts.get)
objectString- 항상 `draft`입니다.
idString- 초안의 id로, `draft-` 뒤에 UUID가 붙습니다. 쓰기 작업은 초안 전체가 아니라 `object`와 `id`만으로 응답하므로, 보낸 id를 재사용하지 말고 결과에서 id를 읽으세요.
toArray<String>- 초안이 저장한 그대로의 수신자 주소로, 표시 이름을 뺀 주소만 담습니다. 초안에 수신자가 없으면 nil이 아니라 빈 Array입니다.
ccArray<String>- 저장된 그대로의 Cc 주소입니다. 없으면 nil이 아니라 빈 Array입니다.
bccArray<String>- 저장된 그대로의 Bcc 주소입니다. 없으면 nil이 아니라 빈 Array입니다.
subjectString- 저장된 제목이며, nil이 되지 않습니다. 제목 없이 저장된 초안은 메일함이 저장하는 자리 표시자인 `(no subject)`로 읽히므로, 빈 String인지 확인하지 말고 그 값과 비교하세요.
htmlString- 저장된 본문이며, 초안에 본문이 없으면 빈 String입니다. 나가는 쪽에는 별도의 텍스트 필드가 없으므로, `text`만으로 저장된 초안도 여기로 반환됩니다.
fromString or nil- 초안이 저장될 때의 주소로, 워크스페이스가 아직 그 주소로 발송할 수 있는 동안에만 보고됩니다. 발신자 없이 저장된 초안이나, 이후 사라진 주소로 저장된 초안에서는 nil입니다.
threadIdString or nil- 초안이 답장하는 스레드이며, 새 대화를 시작하는 초안에서는 nil입니다.
attachmentsArray<Hash>- 각 항목에는 `filename`과 `contentType`만 있는데, 초안의 첨부 파일은 내용 없이 이름과 유형만 저장되기 때문입니다. `update`를 하면 이 목록은 비워집니다.