下書き
`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 です。不明な id は新しい下書きにはならず、OpenEmail::NotFoundError として送出される 404 になります。
下書きのフィールドは API の名前どおりのキーワード引数なので、下書きが返信するスレッドは threadId: です。1 つの Hash として渡すこともできます。下書きは Symbol キーの Hash として返るため、draft[:subject] で件名を読めます。書き込みはどれも object と id だけを返すため、下書き全体は get で読んでください。
list は threads.list と同じようにページ分割します。API の pageToken は next_cursor として返り、cursor: として渡し、list_all と iterate はそれを自動的にたどります。iterate は各下書きをブロックに yield するか、ブロックがなければ Enumerator を返します。1 ページには 25 件の下書きが入り、limit: で最大 100 件まで指定できます。query: は threads.list の検索構文を受け付け、検索が下書きの外に及ぶことはありません。行は object と id だけなので、受信者、件名、本文を得るには get を呼び出してください。
下書きの一覧は hasMore を示さないため、カーソルが返ったときは常に has_more? が true です。サーバーはページが満杯のときは必ずカーソルを出すため、たまたま満杯だった最後のページの後には空のページが 1 つ続きます。
下書きは 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]>` のように表示名を含められますが、カンマを含む名前は 2 つの壊れた受信者に分かれてしまいます。`emails.send` と違い、ここでは gem が単独の 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` はドライバーの 1 つのメッセージフィールドに入るため、両方を送るとこちらが保存されます。
textString- プレーンテキストの本文で、最大 1,000,000 文字。`html` がない場合にだけ使われます。下書きは 2 つの部分ではなく 1 つの本文を保存するため、ここで指定したテキストは、下書きを読むときに変換されないまま `html` として返ります。
fromString- 下書きに保存する送信者のアドレスで、表示名は付けても付けなくてもかまいません。作成時に省略すると、下書きには送信者がありません。更新時に省略すると、保存済みの下書きから引き継がれます。ドライバーは渡されたものからメッセージ全体を作り直すため、これを落とした部分的な更新では、選んだ送信者が黙って変わってしまうからです。更新時に空の String または nil を渡すと消去されます。
threadIdString- 下書きを既存のスレッドに結びつけ、返信として保存します。`from` と同じく、更新時に省略すると引き継がれます。これなしでメッセージを作り直すと、返信がスレッドから切り離されてしまうからです。更新時に空の String を渡すと切り離されます。下書きは引き続き独自の id を持つ独立したスレッドとして保存されるため、返信先のスレッドの中ではなく、下書きと一緒に一覧に表示されます。
値を保持するにはフィールドを省略してください。nil を渡すのは同じではありません。gem はそれを送信し、更新時の from(nil で送信者を消去します)を除くすべてのフィールドが 422 invalid_parameter で拒否します。省略可能な値の Hash は、渡す前に compact を呼び出してください。ボディも厳密です。この 8 つ以外のフィールドも同じように拒否され、添付ファイル用のフィールドはありません。
レスポンス:下書き(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` を行うとこのリストは空になります。